当我将键盘切换到俄语布局时,我的小部件会使用keysym
中的某些变音符号而不是俄语字母来获取关键事件。
这是一个演示(使用dump
module):
import Tkinter as tkinter
from dump import dump
def show_event(e):
dump(e)
root=tkinter.Tk()
lb = tkinter.Listbox(root)
lb.grid()
root.bind_class('Listbox','<Control-Key>', show_event)
root.mainloop()
现在,当我关注列表框并按Ctrl
字母фыва
(对应asdf
)时,打印事件中的keysym
为:{{ 1}},ocircumflex
,ucircumflex
,acircumflex
。
虽然我当然希望获得Cyrillic_ef
, Cyrillic_yeru
等等。
同时,如果我在agrave
中输入文字,则会正确插入俄文字母。
关于发生了什么的任何想法&amp;怎么修?也就是说,也许它甚至没有需要修复(它可能允许一个人使用相同的绑定来进行任何非英语键盘布局)但我仍然想知道这种高度违反直觉的原因效果包括如果它是设计的。
答案 0 :(得分:1)
根据我的发现,这取决于您使用的系统。从答案here看来,对于Windows,您必须在键绑定中将'<Control-ntilde>'
之类的东西一起砍掉,因此您可以执行'<Control-ocircumflex>'
,'<Control-ucircumflex>'
,。 ..
在OSX中,我什至不知道如何去做。我尝试了适用于Windows的示例,但无法获取它来注册按键。而对于Linux,我一直无法尝试。
编辑:要真正回答您的问题,实质上是在Tk将系统提供的虚拟键码转换到Tk窗口时,它使用函数TkpGetKeySym()
,该函数依次称为Windows { {1}}功能。即使仅用于返回Latin-1字符的代码,此函数在处理时也会考虑当前的活动键盘映射。俄语的特定键映射为Windows-1251,在调用ToAscii()
时使用,但调用者将输出解释为好像是Latin-1。有解决办法吗?好像没有我基本上只是(试图)总结this page的内容,因此建议您阅读它进行更深入的解释并检查我是否读错了任何内容。