PyGTK - GtkEntry 插入光标信号不起作用



我正在尝试在我的代码中使用GtkEntry.insert-at-cursor信号,但它似乎不起作用。

    def on_servername_activate(self, widget):
       output = StringIO.StringIO()         
       servername = widget.get_text()
       self.output.write("USHARE_NAME="+servername+'n')

这是我的代码的一部分,我想在其中使用 insert-at-cursor .我几乎可以肯定,这是我犯的一个错误。我用on_servername_insertatcursor替换了on_servername_activate(因为on_servername_insert-at-cursor第一个连字符处给了我语法错误),当文本插入框中时没有任何反应。没有任何东西入output,但是一切都与activate信号完美配合。

信号和方法之间似乎存在概念错误。

一方面,当事件发生时触发信号,这些信号可以命名为字符串,如"在光标处插入""insert_at_cursor"。 另一方面,您需要将这些信号(在小部件中)与您的函数/方法连接起来。 函数/方法可以具有任意名称,为了使它们更易于阅读,我们尝试将它们命名为与信号一样接近,但这不是强制性的。

在您的情况下,您可能希望具有以下内容:

class Foo:
  ...
  def create_widgets(self):
      entry.gtkEntry()
      entry.connect('insert-at-cursor', self.entry_insert_at_cursor)
  def entry_insert_at_cursor(self, *args):
      # some code

如您所见,在 entry.connect(...) 中,信号方法之间发生了匹配。这解释了代码中的语法错误。

另一个误解似乎是使用光标处插入信号。对于该信号,您必须将条目绑定到密钥,这似乎不是您要查找的行为。 根据目标 GTK 版本,您可能希望使用:

      entry.connect('changed', self.entry_changed)

      entry.connect('insert-text', self.entry_insert_text)

在后者中,您的方法将收到更改的文本以及位置。 同样,您可以直接处理与条目关联的缓冲区:

      entry.connect('inserted-text', self.buffer_entry_inserted_text)

该方法将额外接收插入的字节数。

我宁愿使用 gtk 的插入文本信号回调。EntryBuffer 对象,如下所示:

def on_insert_cb (buf, pos, chars, nch):
    print buf.get_text()
# --- skip ---
entry = gtk.Entry()
entry.get_buffer().connect("inserted-text", on_insert_cb)
# --- skip ---

相关内容

  • 没有找到相关文章

最新更新