Python Tkinter Canvas无法绑定键盘

时间:2013-03-07 11:13:56

标签: python tkinter

我一直在运行像这样的小脚本

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)

事情很好。

所以,这真让我困惑。 请有人告诉我为什么会这样,提前谢谢。

3 个答案:

答案 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,那么只要鼠标在画布上你就会有焦点,因此键盘绑定就可以了。

即使画布失去焦点(例如通过在另一个小部件中输入文本),这也会起作用,因为当鼠标再次进入画布时,它将重新获得焦点。