首页 > 解决方案 > 选择非英语布局时,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”按键上运行回调?

标签: pythontkinter

解决方案


您需要执行类似的操作才能使用具有任何语言布局的热键(此示例的回调在按下 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:本例在英文、俄文、乌克兰文、阿拉伯文、阿姆哈拉文、亚美尼亚文、希腊文、格鲁吉亚文、法文、中文、日文等语言排版时勾选。


推荐阅读