为了清楚起见,我将我的程序简化为2个小类:一个带有单个按钮的GUI,以及一个控制器,当单击时将该按钮变为蓝色。为了使GUI能够与控制器通信,它有自己的Controller实例,但是如何让控制器与GUI通信呢?
class Controller():
def buttonClicked(self):
# btn['bg'] = 'blue' - how do I reference the button?
class GUI():
def __init__(self,master):
self.master = master
self.controller = Controller()
self.btn = tk.Button(master,command=self.controller.buttonClicked())
self.btn.pack()
root = tk.Tk()
GUI(root)
root.mainloop()
答案 0 :(得分:2)
如果您不使用其他课程,则可以将buttonClicked
添加到GUI
,然后通过self.btn
引用该按钮。
如果你需要另一个类,那么你必须传递一个主类的引用,以便使用它的属性。
class Controller():
def __init__(self, gui):
self.gui = gui
def buttonClicked(self):
self.gui.btn['bg'] = 'blue'
class GUI():
def __init__(self,master):
self.master = master
self.controller = Controller(self)
self.btn = tk.Button(master,command=self.controller.buttonClicked)
self.btn.pack()
root = tk.Tk()
GUI(root)
root.mainloop()
通过将self
传递给Controller
,Controller
的实例可以使用所有变量,包括按钮,并对其进行编辑。
在定义按钮的命令时,您还需要删除对self.controller.buttonClicked
的调用,我在上面的修改过的代码中已经完成了。