没有其他stackoverflow建议,也没有任何其他外部文档向我展示如何成功地将键绑定到函数。以下是我尝试过的链接(代码复制和粘贴),没有运气。我看到很多人认为焦点是失败的原因,好像包含按钮的框架不是用户的目标,因此不活跃;然而,没有任何东西来自于此。以下是我尝试过的链接:
http://effbot.org/tkinterbook/tkinter-events-and-bindings.htm
python tkinter how to bind key to a button
http://www.java2s.com/Code/Python/GUI-Tk/SetButtontogetfocus.htm
How to bind a keypress to a button in Tkinter
我在PyCharm 5.0.4中运行Python 3.6。
上面链接中的代码是我一直在使用/修改以查看它是如何工作的,但是没有一次尝试以正在执行的操作结束。我得到的最远的是一条错误信息。
感谢。
编辑:我在下面使用的代码(来自最近的链接)
from tkinter import *
root = Tk()
def LeftTurn(event):
print('left')
frame=Frame(root, width=100, height=100)
frame.bind("<Left>", LeftTurn) #Binds the "left" key to the frame and exexutes yourFunction if "left" key was pressed
frame.pack()
root.geometry("640x480")
root.title("Rover ")
root.mainloop()
我也试过这个(下面)
from tkinter import *
root = Tk()
def yourFunction(event):
print('left')
frame = Frame(root, width=100, height=100)
frame.bind("<Left>",yourFunction) #Binds the "left" key to the frame and exexutes yourFunction if "left" key was pressed
frame.pack()
root.mainloop()
答案 0 :(得分:1)
你是对的,这是一个焦点问题。用户无法专注于Frame,因此您必须通过添加
来为它们做到这一点。frame.focus()
或者你可以绑定到不会失焦的东西,比如根窗口:
root.bind("<Left>", LeftTurn)
答案 1 :(得分:1)
所以你的框架需要以某种方式获得焦点才能使你的绑定工作。
请参阅下面的示例代码。如果单击测试按钮,焦点将设置为框架,您可以按左箭头键,您的功能将打印到控制台。如果然后在输入字段内单击,焦点将移动到输入字段,并且在框架再次获得焦点之前,绑定将不再有效。
所以这对某些东西很有用,但我从来没有真正需要绑定到“框架”,而是根目录或顶层窗口或可以直接与键盘或鼠标交互的特定小部件,如Entry或Text。 / p>
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()
您可能希望绑定到root
而不是此代码。这将始终不会触发根窗口中的哪个小部件被点击或在哪个框架中。
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()