我对tkinter很新
我有一个GUI应用程序,Radiobuttons,以及其他小部件
我的主要模块,控制器(在松散的MVC设计中),根据UI事件操作我的视图(禁用此条目,启用另一个等)。
在控制器的init中,在创建视图之后,我使用 bind()函数将事件连接到我的ThisOrThatRadioButton(...)回调函数。它可以用鼠标工作
使用应用程序,我看到我可以使用键盘(选项卡)导航到Radiobutton并选择按钮(空格),但是,然后 - 不调用回调。
如何将整个“选定”事件绑定到回调?
或者我必须将一些(或许多)不同的事件绑定到同一个回调中吗?
谢谢
编辑:
我使用小部件的 bind()函数绑定,而不是 command = MyCallback ,因为我希望小部件调用控制器类的函数,而不是视图类:
self.view.parentFrame.myRadioB.bind("<ButtonRelease-1>", self.ControllerCallback)
小部件是View类的一部分,所以它不知道(也不应该知道)控制器回调,我想。
我是Python的新手,我的观点是更通用的软件设计,所以也许我错过了一些明显的东西。
答案 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