无法在 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
是覆盖它的部分,它永远不会被调用。
我的项目中有两个 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
是覆盖它的部分,它永远不会被调用。