Python 如何添加密钥绑定?

Python 如何添加密钥绑定?,python,python-3.x,tkinter,Python,Python 3.x,Tkinter,没有任何其他stackoverflow建议,也没有任何其他外部文档向我展示如何成功地将密钥绑定到函数。下面是我尝试过的链接(代码复制和粘贴),但没有成功。我看到很多人建议将焦点作为失败的原因,好像包含按钮的框架不是用户的目标,因此不处于活动状态;然而,没有任何结果。以下是我尝试过的链接: 我正在PyCharm 5.0.4中运行Python 3.6 上面链接中的代码是我一直在使用/修改的,以了解它是如何工作的,但没有一次尝试以正在执行的操作结束。我得到的最远的消息是一条错误消息 谢谢 编

没有任何其他stackoverflow建议,也没有任何其他外部文档向我展示如何成功地将密钥绑定到函数。下面是我尝试过的链接(代码复制和粘贴),但没有成功。我看到很多人建议将焦点作为失败的原因,好像包含按钮的框架不是用户的目标,因此不处于活动状态;然而,没有任何结果。以下是我尝试过的链接:

我正在PyCharm 5.0.4中运行Python 3.6

上面链接中的代码是我一直在使用/修改的,以了解它是如何工作的,但没有一次尝试以正在执行的操作结束。我得到的最远的消息是一条错误消息

谢谢

编辑:我在下面使用的代码(来自最新链接)

从tkinter导入*
root=Tk()
def左转(事件):
打印('左')
框架=框架(根,宽度=100,高度=100)
frame.bind(“,LeftTurn)#将“left”键绑定到框架上,并在按下“left”键时执行函数
frame.pack()
根几何(“640x480”)
根标题(“漫游者”)
root.mainloop()
我也试过这个(下面)

从tkinter导入*
root=Tk()
定义功能(事件):
打印('左')
框架=框架(根,宽度=100,高度=100)
frame.bind(“,yourFunction)#将“left”键绑定到框架上,如果按了“left”键,则执行函数
frame.pack()
root.mainloop()

你说得对,这是一个焦点问题。用户不可能将注意力集中在一个框架上,因此您必须通过添加

frame.focus()
或者,您可以绑定到不会失去焦点的对象,如根窗口:

root.bind("<Left>", LeftTurn) 
root.bind(“,LeftTurn)

因此您的帧需要以某种方式获得焦点,以便绑定工作

以下面的示例代码为例。如果单击测试按钮,焦点将设置为帧,您可以按左箭头键,您的功能将打印到控制台。如果然后在输入字段内单击,则焦点将移动到输入字段,在帧再次获得焦点之前,绑定将不再工作

因此,这对某些东西很有用,但我从来没有真正需要绑定到“框架”,而是根窗口或顶级窗口或特定的小部件,它们可以像输入或文本那样直接与键盘或鼠标交互

from tkinter import *


root = Tk()

def LeftTurn(event):
    print('left')

frame=Frame(root)
Button(frame, text="test", command= frame.focus).pack()
Entry(frame).pack()

frame.bind('<Left>', LeftTurn)
frame.pack()

root.mainloop()

请发布您的代码。向我们展示您已经尝试过的代码以及它产生的错误消息。请看,问题是:当我尝试它时,它会起作用。所以我们真的需要看看你的代码。我发布了我尝试过的代码,有可能评论你到底用了什么吗?重点是窗口或小部件,如条目、文本和其他可以与鼠标或键盘交互的小部件。是的!谢谢你的意见。很高兴我能保留剩下的头发。“用户不可能把注意力集中在一个框架上,所以你要么通过添加来帮助他们”——这有点误导。您当然可以创建绑定,让用户将焦点设置为帧。只是它不会自动发生。下次只需使用
command=frame.focus
;这里不需要lambda。是的,我应该这么做。忘记了它可以像使用
focus()
一样简单。更正。
root.bind("<Left>", LeftTurn) 
from tkinter import *


root = Tk()

def LeftTurn(event):
    print('left')

frame=Frame(root)
Button(frame, text="test", command= frame.focus).pack()
Entry(frame).pack()

frame.bind('<Left>', LeftTurn)
frame.pack()

root.mainloop()
from tkinter import *


root = Tk()

def LeftTurn(event):
    print('left')

frame=Frame(root)
Button(frame, text="Button").pack()

root.bind('<Left>', LeftTurn)
frame.pack()

root.mainloop()