Python中GUI与控制器类的双向通信

2024-10-06 13:15:13 发布

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

为了清晰起见,我将我的程序简化为两个小类:一个只有一个按钮的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()

Tags: self程序masterdefguiroot控制器按钮
1条回答
网友
1楼 · 发布于 2024-10-06 13:15:13

如果不使用其他类,那么可以将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传递给ControllerController的实例可以使用所有变量,包括按钮,并对其进行编辑。在

在为按钮定义命令时,您还需要删除对self.controller.buttonClicked的调用,这是我在上面修改过的代码中完成的。在

相关问题 更多 >