【问题标题】:PyGTK - GtkEntry insert-at-cursor signal doesn't workPyGTK - GtkEntry 光标处插入信号不起作用
【发布时间】:2023-03-11 08:51:01
【问题描述】:

我试图在我的代码中使用 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 信号下一切正常。

【问题讨论】:

    标签: signals pygtk glade gtkentry


    【解决方案1】:

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

    一方面,信号在事件发生时触发,这些信号可以是字符串名称,如 'insert-at-cursor''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(...) 中发生了 signalmethod 之间的匹配。 这解释了代码中的语法错误。

    另一个误解似乎是使用信号insert-at-cursor。对于该信号,您必须将条目绑定到一个键,这似乎不是您正在寻找的行为。根据您所针对的 GTK 版本,您可能希望使用:

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

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

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

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

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

    【讨论】:

      【解决方案2】:

      我宁愿使用gtk.EntryBuffer对象的inserted-text信号回调,如下:

      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 ---
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-10-18
        • 1970-01-01
        • 2011-10-06
        • 2012-07-25
        • 1970-01-01
        • 2014-04-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多