无法在 Tkinter 中从一个 class 的实例读取条目值到另一个 class 的实例,同时从同一个 class 的 init 读取工作正常

Can't read entry value from one class's instance to another in Tkinter while reading from the same class's init works fine

我的项目中有两个 class。一个是 GUI,另一个进行计算。我从第一个输入框读取数据并想将它们传递给第二个输入框。到目前为止,我所做的是:

class OptimizationGUI:
    land_entry = 0
    pop_entry = 0

    def __init__(self, master):
        self.land_entry_text = IntVar()
        self.pop_entry_text = IntVar()

        self.master = master

        OptimizationGUI.land_entry = Entry(master, textvariable=self.land_entry_text)

        self.advanced_options = Button(master, text="Advanced", command=self.advanced)

        self.run = Button(master, text="RUN", command=self.start, bg='black', fg='red', bd=4)


    def advanced(self):
        advanced_window = Toplevel()
        OptimizationGUI.pop_entry = Entry(advanced_window, textvariable=self.pop_entry_text)

    def start(self):
        opt = Optimization()
        method = getattr(opt,'get_result')
        yo = method()

在上面的代码中,我将这两个初始化为 class 变量,然后创建条目。我使用 getattr 从 class OptimizationGui 转到另一个。另一个class的代码如下:

class Optimization():

    def __init__(self):
        self.population = OptimizationGUI.pop_entry.get()
        self.land = OptimizationGUI.land_entry.get()
        print self.population, self.land

奇怪的是,虽然它正确地打印了 land_entry 的数据,但是当涉及到 self.population = OptimizationGUI.pop_entry.get() 行时,它打印了以下错误:

AttributeError: 'int' 对象没有属性 'get'

我看到这两者之间的唯一区别是 pop_entry 变量不在 init 函数中,而是在 "advanced" 函数中。克服这个问题的方法是什么?

调用advanced里面的方法init:

def __init__(self, master):
    ...
    self.advanced()

不同之处在于 class 变量整数 0 land_entry 会被 Entry 对象覆盖,而 pop_entry 不会被覆盖,因为 advanced 是覆盖它的部分,它永远不会被调用。