我试图将左右箭头键绑定到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()
Run Code Online (Sandbox Code Playgroud)
为什么这不起作用?
Fiv*_*ver 29
尝试绑定到您的主变量:
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()
Run Code Online (Sandbox Code Playgroud)
我应该解释这是有效的,因为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()
Run Code Online (Sandbox Code Playgroud)
此外,你也可以重写这个,所以你的应用程序是这样的子类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()
Run Code Online (Sandbox Code Playgroud)
Bry*_*ley 18
问题很简单,你绑定的框架没有键盘焦点.按键盘上的某个键时,事件将以键盘焦点发送到窗口小部件.默认情况下,框架没有键盘焦点.
将以下行添加到代码中以将键盘焦点移动到框架:
frame.focus_set()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
37783 次 |
| 最近记录: |