python - 选择非英语布局时,Tkinter 热键绑定不起作用
问题描述
我正在用 Python 创建一个基于 Tkinter 的 GUI。我想让用户使用热键与应用程序交互。我曾尝试使用此代码:
from tkinter import *
def select_all(_event=None):
print("selected")
root = Tk()
root.bind("<Control-A>", select_all)
root.bind("<Control-a>", select_all)
root.mainloop()
但是,不幸的是,当使用非英语布局时,它不起作用。
如何强制 Tkinter 为每种语言布局在“Control+A”按键上运行回调?
解决方案
您需要执行类似的操作才能使用具有任何语言布局的热键(此示例的回调在按下 Control 键时运行,并打印与 Control 同时按下的键:
from tkinter import *
def callback(event):
if (event.state & 4 > 0):
print("Ctrl-%s pressed" % chr(event.keycode))
root = Tk()
root.bind("<Key>", callback)
root.mainloop()
PS:本例在英文、俄文、乌克兰文、阿拉伯文、阿姆哈拉文、亚美尼亚文、希腊文、格鲁吉亚文、法文、中文、日文等语言排版时勾选。