Tkinter 国际绑定

Ant*_*ins 7 python bind tkinter scancodes

Tkinter 有没有办法绑定可以在所有键盘布局中使用的键组合?(通过扫描码绑定)

例如,我需要在所有布局中使用键盘左下角相同物理键的'Control-Z'绑定,例如:     * 俄语布局、     * 希腊语布局等。

这是我尝试过的:

from Tkinter import *
root=Tk()
def f(event):
    print 'undo'
button1=Button(root, text=u'Button')
button1.pack()
button1.bind('<Control-z>', f)
root.mainloop()
Run Code Online (Sandbox Code Playgroud)

它不适用于俄语和希腊语键盘布局。

更新 2:

我用 Windows 做了一些更多的实验,现在一般规则是这样的:

    1) 如果语言基于拉丁字符集,键将“按值”映射(德语法语德沃夏克),以便将相同的操作映射到不同的物理键。
    2)如果不是(例如 俄语希腊语),则所有主要加速键都“按位置”映射(以匹配通常标记在同一键上的相应英文字母)。

只有第二种情况需要特别注意。如果这已经在某些库中实现了,有什么想法吗?

更新 3

即使没有俄语键盘或俄语 Windows,它也可以简单地复制。

1) 开始->控制面板->区域和语言选项
2) 语言->详细信息
3) 添加俄语。

就是这样。现在 Alt-Shift 会将您切换到俄语,您将能够输入以下有趣的符号:

俄语键盘

另一个 Alt-Shift 会将您切换回来。

忘记维基百科关于语音俄语布局的说法。这些天不使用它们。至少在俄罗斯境内。

所有 Windows 应用程序(包括 wxPython 应用程序)都Ctrl-?用于撤消、Ctrl-?剪切、Ctrl-?复制等。

Ant*_*ins 1

我主要感兴趣的是 Windows 中的俄语布局。

我目前使用的快速而肮脏的解决方法是:

import Tkinter

def copy(event):
    print 'Ctrl-C'

root = Tkinter.Tk()
root.bind('<Control-ntilde>', copy)
root.mainloop()
Run Code Online (Sandbox Code Playgroud)

这可能会导致与其他语言中的<Ctrl + actual ntilde>发生冲突。

如果我可以确定当前处于活动状态的布局,则可以克服这个问题,因此第二个问题:Tkinter 确定键盘布局

另一个缺点是,由于修改键的“通用”处理,当我按 Ctrl-Alt-V 时它也会触发,但这是另一个故事,因为它也适用于英语布局。