我一直在运行像这样的小脚本
from Tkinter import *
root = Tk()
def callback(event):
print "callback"
w = Canvas(root, width=300, height=300)
w.bind("<Key>", callback)
w.pack()
root.mainloop()
但是,在我的情况下不处理键盘事件(我在窗口7上使用python 2.7)
如果我使用
w.bind("<Button-1>", callback)
事情很好。
所以,这真让我困惑。 请有人告诉我为什么会这样,提前谢谢。
答案 0 :(得分:11)
键绑定仅在具有键盘焦点的窗口小部件获得键事件时触发。默认情况下,画布不获得键盘焦点。您可以使用focus_set
方法重点关注它。通常,您可以在鼠标按钮上进行绑定。
将以下绑定添加到您的代码中,然后在画布中单击,您的键绑定将开始起作用:
w.bind("<1>", lambda event: w.focus_set())
答案 1 :(得分:3)
为避免单击画布以激活键绑定&#34;,我在以下站点找到了更简单的代码:
http://ubuntuforums.org/showthread.php?t=1378609
他正在尝试绑定一个框架,但我在自己的代码中实现了它,并且canvas小部件也可以工作。您的代码如下所示:
w.focus_set()
w.bind(<Key>, callback)
答案 2 :(得分:1)
tkinter中有一个名为“Enter”的便捷事件,用于跟踪鼠标何时进入窗口小部件。如果你将它绑定到画布,并且在该事件的绑定回调中你是canvas.focus_set,那么只要鼠标在画布上你就会有焦点,因此键盘绑定就可以了。
即使画布失去焦点(例如通过在另一个小部件中输入文本),这也会起作用,因为当鼠标再次进入画布时,它将重新获得焦点。