Кажется, между сигналами и методами существует концептуальная ошибка.
С одной стороны, сигналы запускаются при возникновении события. Эти сигналы могут быть именами в виде строк, например '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(...) происходит совпадение между сигналом и методом. Это объясняет синтаксическую ошибку в вашем коде.
Другим заблуждением является использование сигнала insert-at-cursor. Для этого сигнала вы должны привязать запись к ключу, что не похоже на поведение, которое вы ищете. В зависимости от версии GTK, на которую вы ориентируетесь, вы можете использовать:
entry.connect('changed', self.entry_changed)
or
entry.connect('insert-text', self.entry_insert_text)
В последнем случае ваш метод получит измененный текст, а также позицию. Точно так же вы можете работать непосредственно с буфером, связанным с записью:
entry.connect('inserted-text', self.buffer_entry_inserted_text)
Где метод получит дополнительно номера вставленных байтов.
person
gpoo
schedule
25.06.2012