tkinter - 将窗口小部件的所有“选定”事件绑定到回调

时间:2017-10-30 10:07:09

标签: tkinter

我对tkinter很新 我有一个GUI应用程序,Radiobuttons,以及其他小部件 我的主要模块,控制器(在松散的MVC设计中),根据UI事件操作我的视图(禁用此条目,启用另一个等)。
在控制器的init中,在创建视图之后,我使用 bind()函数将事件连接到我的ThisOrThatRadioButton(...)回调函数。它可以用鼠标工作 使用应用程序,我看到我可以使用键盘(选项卡)导航到Radiobutton并选择按钮(空格),但是,然后 - 不调用回调。
如何将整个“选定”事件绑定到回调?
或者我必须将一些(或许多)不同的事件绑定到同一个回调中吗? 谢谢

编辑:
我使用小部件的 bind()函数绑定,而不是 command = MyCallback ,因为我希望小部件调用控制器类的函数,而不是视图类:

self.view.parentFrame.myRadioB.bind("<ButtonRelease-1>", self.ControllerCallback)

小部件是View类的一部分,所以它不知道(也不应该知道)控制器回调,我想。
我是Python的新手,我的观点是更通用的软件设计,所以也许我错过了一些明显的东西。

2 个答案:

答案 0 :(得分:2)

你还没有说明你用什么方法来绑定(但我猜你绑定了一个鼠标事件)而不是你可以在每个按钮的构造函数中添加command,然后是任何东西更改选择(鼠标或键盘)将调用您的回调,虽然没有event对象:

http://effbot.org/tkinterbook/radiobutton.htm

from tkinter import *

def changed():
    print("Changed value")
master = Tk()

v = IntVar()

Radiobutton(master, text="One", variable=v, value=1, command=changed).pack(anchor=W)
Radiobutton(master, text="Two", variable=v, value=2, command=changed).pack(anchor=W)

master.mainloop()

答案 1 :(得分:0)

我找到了答案,感谢詹姆斯肯特,他让我想到:
我的控制器模块,而不是绑定特定事件,通过 widget.configure()设置命令。
https://stackoverflow.com/a/68524/1499700