Tkinter-无法绑定箭头键事件

2024-05-17 06:58:04 发布

您现在位置:Python中文网/ 问答频道 /正文

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

为什么这不起作用?


Tags: keyrighteventbindmaintkinterdef事件
3条回答

问题很简单,绑定到的帧没有键盘焦点。当您按下键盘上的键时,事件将以键盘焦点发送到小部件。默认情况下,帧没有键盘焦点。

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

frame.focus_set()
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()

尝试绑定到主变量:

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()

相关问题 更多 >