如何从单个tkinter条目小部件中获取不同变量的整数输入?

2024-10-02 20:33:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在为生态系统模拟编写一个代码,用户可以在其中调整初始值,例如人口规模、生育率等。我不想为每个变量编写一个方法,而是想使用一个可以为每个变量调用的通用方法。我还想排除非整数作为输入,并将可接受的值限制在某个范围内

然而,最后一个要求在我的代码中失败了,因为每个变量的范围限制相互影响。基本上是因为我无法向entry.bind方法添加参数。如何解决这个问题

下面,您将看到我的代码的简化版本,其中出现了问题

import tkinter as tk
class Window():
    def __init__(self):
        tk.Label(master, text ='Fox number').grid(row=0,column=0)
        tk.Label(master, text ='Hare number').grid(row=1,column=0)
        self.fox_entry=tk.Entry(master, width=5)
        self.fox_entry.grid(row=0, column=1)
        self.hare_entry=tk.Entry(master, width=5)
        self.hare_entry.grid(row=1, column=1)

class Ecosystem():
    def __init__(self):
        self.foxnumber = 10
        self.harenumber = 100

    def initiate(self):

        def input_user(entry,value, minval, maxval):
            self.value = value
            self.inputvalue = value
            self.minval = minval
            self.maxval = maxval

            def get_value(event):
                try:
                    self.inputvalue = int(entry.get())
                    print(self.inputvalue)
                except ValueError:
                    entry.delete(0,'end')
                    entry.insert(0,self.value)
                    self.inputvalue = self.value
                if self.inputvalue not in range(self.minval, self.maxval+1):
                    entry.delete(0,'end')
                    entry.insert(0,self.value)                     
                    self.inputvalue = self.value
                print(self.inputvalue)

            entry.bind('<Return>', get_value)
            value = self.inputvalue
            return value

        my_win.fox_entry.insert(0,self.foxnumber)
        self.foxnumber = input_user(my_win.fox_entry,self.foxnumber, 0, 50)  

        my_win.hare_entry.insert(0,self.harenumber)
        self.harenumber = input_user(my_win.hare_entry,self.harenumber, 0, 200)
        # more variables will added later on

master = tk.Tk()
my_win = Window()
my_ecosystem = Ecosystem()
my_ecosystem.initiate()
master.mainloop()


Tags: selfmastervaluemydefcolumnwintk