Python Tkinter Canvas无法绑定键盘

问题描述 投票:9回答:3

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

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)

事情很好。

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

python tkinter
3个回答
11
投票

仅当具有键盘焦点的窗口小部件获得键事件时,才会触发键绑定。默认情况下,画布不会获得键盘焦点。您可以使用focus_set方法重点关注它。通常,您可以在鼠标按钮上进行绑定。

将以下绑定添加到您的代码中,然后在画布中单击,您的键绑定将开始工作:

w.bind("<1>", lambda event: w.focus_set())

3
投票

为了避免“单击画布以激活键绑定”,我在以下站点找到了更简单的代码:

http://ubuntuforums.org/showthread.php?t=1378609

他试图绑定一个框架,但我在自己的代码中实现了它,并且canvas小部件也可以工作。您的代码如下所示:

w.focus_set()
w.bind(<Key>, callback)

1
投票

在tkinter中有一个名为“Enter”的便捷事件,用于跟踪鼠标何时进入窗口小部件。如果将它绑定到画布,并且在该事件的绑定回调中使用canvas.focus_set,那么只要鼠标位于画布上,您就会有焦点,因此键盘绑定将起作用。

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

© www.soinside.com 2019 - 2024. All rights reserved.