Tkinter 键盘事件不适用于字符
Tkinter keyboard event dosen't work with characters
[树莓派 3 b+,Python]
首先,我会为我的语言能力道歉。
我正在为键盘事件编写 Tkinter,像(向上)(向下)这样的键盘命令按钮工作正常但普通字符不起作用(例如 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
我想使用键盘字符按钮来正常工作,就像向上、向下按钮一样。
如果框架没有焦点,可能会发生这种情况,因此 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()
或
只需将其绑定到主window。
from tkinter import *
root = Tk(). # Main window
# bind the callback to the main window.
root.bind( '1', lambda k: print(k) )
root.mainloop()
"1"
和 '1'
应该可以。 "<1>"
代表鼠标按键1.
如果要绑定到框架,则必须确保它具有键盘焦点。默认情况下,框架没有键盘焦点。
例如,要强制键盘焦点到您需要调用的框架 focus_set
:
frame.focus_set()
[树莓派 3 b+,Python] 首先,我会为我的语言能力道歉。
我正在为键盘事件编写 Tkinter,像(向上)(向下)这样的键盘命令按钮工作正常但普通字符不起作用(例如 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
我想使用键盘字符按钮来正常工作,就像向上、向下按钮一样。
如果框架没有焦点,可能会发生这种情况,因此 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()
或
只需将其绑定到主window。
from tkinter import *
root = Tk(). # Main window
# bind the callback to the main window.
root.bind( '1', lambda k: print(k) )
root.mainloop()
"1"
和 '1'
应该可以。 "<1>"
代表鼠标按键1.
如果要绑定到框架,则必须确保它具有键盘焦点。默认情况下,框架没有键盘焦点。
例如,要强制键盘焦点到您需要调用的框架 focus_set
:
frame.focus_set()