我正在尝试将左右箭头键绑定到Tkinter中的事件,但是当我运行程序时,它会显示事件未触发。这是代码:
from Tkinter import *
main = Tk()
def leftKey(event):
print "Left key pressed"
def rightKey(event):
print "Right key pressed"
frame = Frame(main, width=100, height=100)
frame.bind('<Left>', leftKey)
frame.bind('<Right>', rightKey)
frame.pack()
frame.mainloop()
为什么这不起作用?
答案 0 :(得分:27)
尝试绑定到您的主变量:
from Tkinter import *
main = Tk()
def leftKey(event):
print "Left key pressed"
def rightKey(event):
print "Right key pressed"
frame = Frame(main, width=100, height=100)
main.bind('<Left>', leftKey)
main.bind('<Right>', rightKey)
frame.pack()
main.mainloop()
我应该解释一下这是有效的,因为Tk知道绑定,因为主窗口有键盘焦点。正如@ BryanOakley的回答解释的那样,您也可以将键盘焦点设置为另一帧:
from Tkinter import *
main = Tk()
def leftKey(event):
print "Left key pressed"
def rightKey(event):
print "Right key pressed"
frame = Frame(main, width=100, height=100)
frame.bind('<Left>', leftKey)
frame.bind('<Right>', rightKey)
frame.focus_set()
frame.pack()
main.mainloop()
详细了解events and bindings at effbot。
另外,你也可以重写这个,所以你的应用程序是Tkinter.Frame
的子类,如下所示:
import Tkinter
class Application(Tkinter.Frame):
def __init__(self, master):
Tkinter.Frame.__init__(self, master)
self.master.minsize(width=100, height=100)
self.master.config()
self.master.bind('<Left>', self.left_key)
self.master.bind('<Right>', self.right_key)
self.main_frame = Tkinter.Frame()
self.main_frame.pack(fill='both', expand=True)
self.pack()
@staticmethod
def left_key(event):
print event + " key pressed"
@staticmethod
def right_key(event):
print event + " key pressed"
root = Tkinter.Tk()
app = Application(root)
app.mainloop()
答案 1 :(得分:17)
问题很简单,你绑定的框架没有键盘焦点。按键盘上的某个键时,事件将以键盘焦点发送到窗口小部件。默认情况下,框架没有键盘焦点。
在代码中添加以下行,将键盘焦点移动到框架:
frame.focus_set()
答案 2 :(得分:1)
from tkinter import *
def leftKey(event):
print("Left key pressed")
def rightKey(event):
print("Right key pressed")
main = Tk()
frame = Frame(main, width=100, height=100)
main.bind('<Left>', leftKey)
main.bind('<Right>', rightKey)
frame.pack()
main.mainloop()
答案 3 :(得分:1)
可能是你没有拦截正确的事件。数字小键盘上的箭头和其他箭头具有不同的符号名称。
请参阅http://infohost.nmt.edu/tcc/help/pubs/tkinter/web/key-names.html
数字小键盘上的那些名称前面有一个'KP_'。
希望它有所帮助。请原谅一个新手,如果不相关: - )