[英]How to bind ONLY ASCII keys in tkinter?
我只想使用 tkinter 绑定 ASCII 键。我知道如何有选择地(按键)绑定它,甚至将它绑定到所有键盘键(通过使用<Key>
或<KeyPress>
),但问题是,我不知道知道如何对每个 ASCII 键执行相同的操作。
到目前为止,这是我尝试过的:
<Key>
或<KeyPress>
绑定来捕获所有键盘键(不支持鼠标键):import tkinter as tk
def key_press(event):
label.config(text = f'char Pressed: {event.char!r}')
label2.config(text=f'keysym Pressed: {event.keysym!r}')
root = tk.Tk()
label = tk.Label(root, text='Press a key')
label2 = tk.Label(root, text='Press a key')
label.pack()
label2.pack()
root.bind('<Key>', key_press)
root.mainloop()
import tkinter as tk
def key_press(event):
label.config(text = f'char Pressed: {event.char!r}')
label2.config(text=f'keysym Pressed: {event.keysym!r}')
root = tk.Tk()
label = tk.Label(root, text='Press a key')
label2 = tk.Label(root, text='Press a key')
label.pack()
label2.pack()
# here we only use the K and BackSpace key as example
root.bind('<BackSpace>', key_press)
root.bind('<K>', key_press)
root.mainloop()
如何仅使用 tkinter 将 function 绑定到所有 ascii 键? (如果可能,没有第三方模块)
在我看来,仅绑定ascii 字符的最简单有效的解决方案是使用event.char 。 event.char
对应于%A
,如果没有解析可打印字符,则为空字符串。 要访问单个字符,您可以使用repr ,因为它在 tkinter 中实现
我没有使用event.keycode
因为对于Multi_key它们似乎不可靠。 还包括del
-key 但没有找到更好的方法来使用keysym
,请随意寻找更好的方法
示例代码:
import tkinter as tk
def isascii(event):
if event.char != '':
char = list(event.char)[0] #'^' or '`' is only parsed as doubles in Windows
if ord(char) <= 127: #avoid non-ascii like '²' or '³' or '´'
print(
repr(char), #printable character
ord(char) #corresponding ascii value
)
elif event.keysym == 'Delete':
print('backspace / delete', 127)
root = tk.Tk()
root.bind('<Key>', isascii)
root.mainloop()
压缩版:
import tkinter as tk
def isascii(event):
if event.char != '' and ord((char := list(event.char)[0])) <= 127:
print(
repr(char), #printable character
ord(char) #corresponding ascii value
)
elif event.keysym == 'Delete': print('delete', 127)
root = tk.Tk()
root.bind('<Key>', isascii)
root.mainloop()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.