Tkinter键盘事件不适用于字符

时间:2019-04-19 04:45:01

标签: python tkinter keyboard-events

[Raspberri PI 3 b +,Python] 首先,我会道歉我的语言能力。

我正在为键盘事件编码Tkinter,像(Up)(Down)这样的键盘命令按钮可以正常工作,但普通字符却不起作用(例如1-9,A-Z)

我累了

frame.bind('<Left>', leftKey)      # THIS OK

frame.bind('<Right>', rightKey)    # THIS OK

但是

frame.bind('<1>', leftKey)   # Not work

frame.bind('1', leftKey)     # Not work

frame.bind("1", leftKey)     # Not work

我想使用键盘字符botton与“向上”,“向下”按钮正常工作。

2 个答案:

答案 0 :(得分:0)

如果框架没有焦点,则可能发生这种情况,因此frame.bind('<1>', leftKey)将无法工作。

您可以通过打印frame.focus_get()检查哪个窗口小部件具有焦点。

有两种方法可以解决问题。

您可以将焦点设置为绑定回调之前的框架

示例:

from tkinter import *

root = Tk()

root.geometry('100x100+100+100')

frame = Frame(root)
frame.pack()
frame.focus_set()   # This will get the frame in focus.

# If the frame is in focus the bind will work.
frame.bind( "1", lambda _: print(frame.focus_get()) )

root.mainloop()

只需将其绑定到主窗口即可。

from tkinter import *

root = Tk().  # Main window 

# bind the callback to the main window.
root.bind( '1', lambda k: print(k) )

root.mainloop()

答案 1 :(得分:0)

"1"'1'应该可以工作。 "<1>"代表鼠标按钮1。

如果要绑定到框架,则必须确保其具有键盘焦点。默认情况下,框架没有键盘焦点。

例如,要将键盘焦点强制到某个帧,您需要调用focus_set

frame.focus_set()