vadim vaduxa Asked:2020-11-09 00:03:43 +0000 UTC2020-11-09 00:03:43 +0000 UTC 2020-11-09 00:03:43 +0000 UTC 如何使程序响应俄语布局中的键盘快捷键 772 如何为俄罗斯布局做Control-Ч呢? event.widget.event_generate('<Control-X>') python 4 个回答 Voted Best Answer Стив Ривз 2020-07-08T00:50:25Z2020-07-08T00:50:25Z 我这样做了。 首先,我根据这里的建议获得了当前的布局语言: def is_ru_lang_keyboard(self): u = ctypes.windll.LoadLibrary("user32.dll") pf = getattr(u, "GetKeyboardLayout") return hex(pf(0)) == '0x4190419' 然后他确定了keys()考虑到布局的方法,因为。在英文布局的情况下没有条件,该方法在插入时给出了行的重复: def keys(event): if self.is_ru_lang_keyboard(): if event.keycode==86: event.widget.event_generate("<<Paste>>") elif event.keycode==67: event.widget.event_generate("<<Copy>>") elif event.keycode==88: event.widget.event_generate("<<Cut>>") elif event.keycode==65535: event.widget.event_generate("<<Clear>>") elif event.keycode==65: event.widget.event_generate("<<SelectAll>>") 将方法绑定到事件keys()的字段:Entry"<Control-KeyPress>" self.my_entry.bind("<Control-KeyPress>", keys) Leo Leontev 2020-12-20T03:33:30Z2020-12-20T03:33:30Z 你可以使用Event.keycode。因此,一切都将不依赖于布局。例如,对于您的情况 (Ctrl-Ч和Crtl-X) from tkinter import * root = Tk() def keys(event): if event.keycode==88: # Клавиша с буквой Ч и с англ. буквой X print("Ура! Вы нажали Ctrl-Ч! (Или Ctrl-X)") root.bind("<Control-KeyPress>",keys) root.mainloop() PS:对不起,Event.generate我不知道 infval 2020-02-17T04:09:54Z2020-02-17T04:09:54Z 取决于event您在widget.bind(). 如果您按照@Leo-Leontev 的示例处理键: def keys(event): if event.keycode == 88 and event.state == 4: print("Ctrl-X") root.bind("<Control-KeyPress>", keys) 添加了一个检查event.state == 4,因为 Ctrl+Shift+X 也会被调用,event.stateCtrl (4)、Shift (1)、Alt 修饰符存储在 (131072) 中。在这里您可以简单地指定<KeyPress>. 在这种情况下,您需要调用: widget.event_generate('<KeyPress>', keycode=88, state=4) 可以在( )event之后查看对象的状态:event_generate()print(event) widget.event_generate('<Control-X>') # <KeyPress event state=Shift|Control keysym=X keycode=88 ...> widget.event_generate('<Control-x>') # <KeyPress event state=Control keysym=x keycode=88 ...> SiVal 2020-12-03T22:17:58Z2020-12-03T22:17:58Z Control-KeyPress-multiply - 对于大 h Control-KeyPress-division - 对于小 h
我这样做了。
首先,我根据这里的建议获得了当前的布局语言:
然后他确定了
keys()考虑到布局的方法,因为。在英文布局的情况下没有条件,该方法在插入时给出了行的重复:将方法绑定到事件
keys()的字段:Entry"<Control-KeyPress>"你可以使用
Event.keycode。因此,一切都将不依赖于布局。例如,对于您的情况 (Ctrl-Ч和Crtl-X)PS:对不起,
Event.generate我不知道取决于
event您在widget.bind(). 如果您按照@Leo-Leontev 的示例处理键:添加了一个检查
event.state == 4,因为 Ctrl+Shift+X 也会被调用,event.stateCtrl (4)、Shift (1)、Alt 修饰符存储在 (131072) 中。在这里您可以简单地指定<KeyPress>.在这种情况下,您需要调用:
可以在( )
event之后查看对象的状态:event_generate()print(event)Control-KeyPress-multiply - 对于大 h Control-KeyPress-division - 对于小 h