为了清楚起见,我将程序简化为2个小类:一个带有单个按钮的GUI,以及一个在单击时将该按钮变为蓝色的控制器。为了使 GUI 能够与控制器通信,它有自己的控制器实例,但是如何让该控制器随后与 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()
如果您不使用其他类,则可以将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
的调用,我已经在上面的更改代码中完成了此操作。