擅长:python、mysql、java
<p>我认为这个问题与打印keyvalue有关。当您捕获按键并在textview上打印时,您正在传递keyvalue</p>
<pre><code> def on_key_down(self, widget, event, data=None):
keyval = event.keyval
keyname = Gdk.keyval_name(keyval)
self.textbuffer.insert_at_cursor(keyname+'\n')
</code></pre>
<p>在该函数中,当您尝试打印特殊字符(如@)时,它将被打印为“at”,因为这是它的键名。
要打印此按键产生的文本,您必须将其更改为</p>
<pre><code>self.textbuffer.insert_at_cursor(event.string+'\n')
</code></pre>
<p><a href="https://developer.gnome.org/gdk3/stable/gdk3-Event-Structures.html#GdkEventKey" rel="nofollow noreferrer">https://developer.gnome.org/gdk3/stable/gdk3-Event-Structures.html#GdkEventKey</a></p>
<p>或者,您也可以将keyevent传播到textview</p>
<p><a href="https://developer.gnome.org/gtk3/stable/GtkWindow.html#gtk-window-propagate-key-event" rel="nofollow noreferrer">https://developer.gnome.org/gtk3/stable/GtkWindow.html#gtk-window-propagate-key-event</a>
<a href="https://developer.gnome.org/gtk3/stable/chap-input-handling.html" rel="nofollow noreferrer">https://developer.gnome.org/gtk3/stable/chap-input-handling.html</a></p>