Tkinter - 无法绑定箭头键事件

aft*_*pet 20 python tkinter

我试图将左右箭头键绑定到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)

在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()
Run Code Online (Sandbox Code Playgroud)

  • 实际问题只是框架没有键盘焦点.如果将焦点设置到框架,问题中的代码将正常工作. (2认同)

Bry*_*ley 18

问题很简单,你绑定的框架没有键盘焦点.按键盘上的某个键时,事件将以键盘焦点发送到窗口小部件.默认情况下,框架没有键盘焦点.

将以下行添加到代码中以将键盘焦点移动到框架:

frame.focus_set()
Run Code Online (Sandbox Code Playgroud)