首页 > 解决方案 > 从控制器类而不是 GUI 类访问 tkinter 键盘输入

问题描述

我正在尝试创建一个由控制器类和 GUI 类组成的 GUI 程序。使用 tkinter,我有一个键绑定设置来检查 wasd 输入。我需要将此键盘输入输入到我的控制器类中,以便我可以控制程序的功能。

下面是我的代码的粗略结构。

class gui(tkinter.Canvas) :
    def __init__(self) :
        self.bind_all("<Key>", self.keypress)

    def keypress(self, key) :
        event = key.char

class controller(object) :
    def __init__(self) :
        gui = gui()

    def control(self) :
        # code to use gui event input to control program.

这段代码可能不起作用,我不想使用它。这只是为了显示我的应用程序的结构以及我需要从控制器类中的控制方法访问 tkinter 画布键盘输入。

标签: pythonpython-3.xuser-interfacetkinter

解决方案


您需要创建控制器实例,然后将该实例传递给 GUI。

c = controller()
g = gui(controller)

您应该在其中gui保存对 的引用controller,您可以从中访问控制器中的方法。

class gui(tkinter.Canvas):
    def __init__(self, controller):
        self.controller = controller
        ...
    def keypress(self, key):
        ...
        self.controller.control()

推荐阅读