LINUX.ORG.RU

GtkEntry ругается при подключении сигнала insert-text

 ,


0

2

В общем, есть поле ввода, изменения текста в котором нужно отслеживать посимвольно. Точнее той его части, что перед курсором. Для этих целей примерно такой код

from gi.repository import Gtk

class Main():
    def __init__(self):
        self.win = Gtk.Window()
        self.entry = Gtk.Entry()
        self.curpos = 0

        self.entry.connect("insert-text", self.on_insert_text)
        self.entry.connect("delete-text", self.on_delete_text)
        self.entry.connect("changed", self.on_changed)

        self.win.add(self.entry)
        self.win.connect("delete-event", Gtk.main_quit)
        self.win.show_all()

    def on_insert_text(self, entry, text, length, *args):
        self.curpos = entry.get_position() + length

    def on_delete_text(self, entry, start, end, *args):
        self.curpos = start

    def on_changed(self, *args):
        print(self.entry.get_text()[:self.curpos])

if __name__ == "__main__":
    Main()
    Gtk.main()

Оно работает, но при вводе первого символа стабильно выдает варнинг

Warning: g_value_get_int: assertion 'G_VALUE_HOLDS_INT (value)' failed
Может кто-нибудь пояснить чем он вызван и как бороться?

Gtk 3.10, python3.4.

★★★

у тебя обработчик «insert-text» криво описан

ananas ★★★★★ ()
Ответ на: комментарий от ananas

Можно подробнее? Ругается даже на

def on_insert_text(self, *args):
    pass

Worron ★★★ ()
Ответ на: комментарий от Worron

подробнее - в документации, смотри прототип обработчика сигнала insert-text для gtk.Editable

ananas ★★★★★ ()
Ответ на: комментарий от ananas

Документацию я смотрел до того как здесь спросить. Выше указано, проблема даже с обработчиком-пустышкой.

Worron ★★★ ()
Ответ на: комментарий от Worron

посмотри еще раз. у тебя не хватает аргументов у обработчика. а ты пытаешься создать пустышку с еще меньшим количеством. в результате в стеке у тебя абышо, абыгде, абыкак, что, скорее всего, и влияет на появление варнинга

ananas ★★★★★ ()
Ответ на: комментарий от ananas

а ты пытаешься создать пустышку с еще меньшим количеством

Нет. Питоний *args принимает произвольное количество аргументов, поэтому и натыканы везде где можно.

Собственно специально оформил кусок кода в рабочий пример в надежде получить совет по конкретной реализации на питоне.

Worron ★★★ ()

Похоже на баг в gi. Если добавить gi.require('Gtk', '2.0') он работает также, но если заменить первую строчку на import gtk as Gtk, то warning исчезает.

rymis ★★ ()
Ответ на: комментарий от rymis

Понятно, спасибо. В принципе на работоспособность не влияет, но чисто эстетически нервирует. Потыкал на более свежей версии gtk3 - тоже самое, походу пока смирюсь.

Worron ★★★ ()
Ответ на: комментарий от Worron

Не хрена не питоняша, а бздун, но, мне кажется «в либу» всё вываливает и «ошибка» уже... со слов _«а запустим ка, енту хренотень»_ уже валит. По аналогии ведра-видео, или гугла проверка рилея, какие-то такие нестыковки.

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.