组合键a+mod1应返回 用我的母语波兰语写的带尾巴的信, 而gtk返回aogonek
如何解决此密钥和其他密钥的此问题
(……)
def on_key_release(self, widget, event, data=None):
keyval = event.keyval
keyname = Gdk.keyval_name(keyval)
ctrl = (event.state & Gdk.ModifierType.CONTROL_MASK)
shift = (event.state & Gdk.ModifierType.SHIFT_MASK)
mod1 = (event.state & Gdk.ModifierType.MOD1_MASK)
super = (event.state & Gdk.ModifierType.SUPER_MASK)
hyper = (event.state & Gdk.ModifierType.HYPER_MASK)
meta = (event.state & Gdk.ModifierType.META_MASK)
lock = (event.state & Gdk.ModifierType.LOCK_MASK)
if keyname in self.buffer:
self.buffer.remove(keyname)
if self.buffer:
self.textbuffer.insert_at_cursor('you released '+'+'.join(self.buffer)+'\n')
def on_key_down(self, widget, event, data=None):
keyval = event.keyval
keyname = Gdk.keyval_name(keyval)
ctrl = (event.state & Gdk.ModifierType.CONTROL_MASK)
shift = (event.state & Gdk.ModifierType.SHIFT_MASK)
mod1 = (event.state & Gdk.ModifierType.MOD1_MASK)
super = (event.state & Gdk.ModifierType.SUPER_MASK)
hyper = (event.state & Gdk.ModifierType.HYPER_MASK)
meta = (event.state & Gdk.ModifierType.META_MASK)
lock = (event.state & Gdk.ModifierType.LOCK_MASK)
if keyname in 'AĄz aogonek żółćgęśaą' and keyname and (shift or mod1 or ctrl or super or hyper or meta or lock) not in self.buffer:
self.buffer.append(keyname)
if self.buffer:
self.textbuffer.insert_at_cursor('you pressed '+'+'.join(self.buffer)+'\n')
(……)
我认为这个问题与打印keyvalue有关。当您捕获按键并在textview上打印时,您正在传递keyvalue
在该函数中,当您尝试打印特殊字符(如@)时,它将被打印为“at”,因为这是它的键名。 要打印此按键产生的文本,您必须将其更改为
https://developer.gnome.org/gdk3/stable/gdk3-Event-Structures.html#GdkEventKey
或者,您也可以将keyevent传播到textview
https://developer.gnome.org/gtk3/stable/GtkWindow.html#gtk-window-propagate-key-eventhttps://developer.gnome.org/gtk3/stable/chap-input-handling.html
相关问题 更多 >
编程相关推荐