我正在尝试在我的代码中使用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_activate
替换为on_servername_insertatcursor
(因为on_servername_insert-at-cursor
在第一个连字符处给出了语法错误),并且当文本插入到框中时没有任何反应。没有任何内容插入output
,但是所有内容都与activate
信号完美配合。
答案 0 :(得分:3)
似乎信号和方法之间存在概念上的错误。
一方面,当事件发生时触发信号,这些信号可以是像'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(...)中发生 signal 和 method 之间的匹配。 这解释了代码中的语法错误。
另一个误解似乎是使用信号 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)
此方法将另外接收插入的字节数。
答案 1 :(得分:0)
我宁愿使用 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 ---