LINUX.ORG.RU

[gtk][pygtk] Неправильная реакция на обработчики сигналов «test-collapse-row» и «test-expand-row» виджета gtk.TreeView


0

1

Приветствую.

При реализации «ленивого» дерева обнаружил, что виджет gtk.TreeView неверно реагирует на возвращаемые значения обработчиков сигналов «test-expand-row» и «test-collapse-row». В документации говорится, что узлы дерева раскрываются и закрываются если обработчики этих сигналов возвращают True. На деле все происходит с точностью до наоборот — возвратишь True получишь фигу, возвратишь False получишь желаемый результат.

Вот тестовый код:

import gtk


class MyTreeView(gtk.TreeView):
    __gsignals__ = {
        "test-expand-row": "override",
        "test-collapse-row": "override"
    }

    def __init__(self):
        model = gtk.TreeStore(str)
        super(MyTreeView, self).__init__(model)

        # Fill model
        for i in range(5):
            parent = model.append(None, ("Parent %d" % i,))
            for j in range(4):
                model.append(parent, ("Child %d" % j,))

        # Create column and cellrenderers
        column = gtk.TreeViewColumn()
        self.append_column(column)
        renderer = gtk.CellRendererText()
        column.pack_start(renderer, True)
        column.set_attributes(renderer, text=0)

        self.set_headers_visible(False)

    def do_test_expand_row(self, iter, path):
        return False

    def do_test_collapse_row(self, iter, path):
        return True

def main():
    window = gtk.Window()
    window.set_title("TreeView Signals Test")
    window.set_default_size(600, 400)
    window.connect("destroy", gtk.main_quit)
    sw = gtk.ScrolledWindow()
    tree = MyTreeView()
    sw.add(tree)
    window.add(sw)
    window.show_all()
    gtk.main()

if __name__ == '__main__':
    main()

У меня узлы дерева распахиваются, но закрыться не в состоянии, хотя должно быть наоборот! Версия pygtk 2.24.0.

Если не мудрить с __gsignals__ и воспользоваться connect() результат аналогичен:

import gtk


class MyTreeView(gtk.TreeView):
    def __init__(self):
        model = gtk.TreeStore(str)
        super(MyTreeView, self).__init__(model)

        # Fill model
        for i in range(5):
            parent = model.append(None, ("Parent %d" % i,))
            for j in range(4):
                model.append(parent, ("Child %d" % j,))

        # Create column and cellrenderers
        column = gtk.TreeViewColumn()
        self.append_column(column)
        renderer = gtk.CellRendererText()
        column.pack_start(renderer, True)
        column.set_attributes(renderer, text=0)

        self.set_headers_visible(False)

        self.connect("test-expand-row", self.__test_expand_row)
        self.connect("test-collapse-row", self.__test_collapse_row)

    def __test_expand_row(self, widget, iter, path):
        return False

    def __test_collapse_row(self, widget, iter, path):
        return True

def main():
    window = gtk.Window()
    window.set_title("TreeView Signals Test")
    window.set_default_size(600, 400)
    window.connect("destroy", gtk.main_quit)
    sw = gtk.ScrolledWindow()
    tree = MyTreeView()
    sw.add(tree)
    window.add(sw)
    window.show_all()
    gtk.main()

if __name__ == '__main__':
    main()
★★★★★

test-collapse-row

Returns : FALSE to allow collapsing, TRUE to reject

test-expand-row

Returns : FALSE to allow expansion, TRUE to reject

я как-то не так читаю?

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

звиняйте, дядька, но документация собрана from scratch, сиречь с опцией --enable-gtk-doc при ./configure для gtk+-2.24.4. ничего свежее в данной второй ветке придумать нельзя. и очень сомневаюсь, что биндинги будут менять дефолтное поведение

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

Сейчас кстати с удивлением для себя обнаружил, что в установленной документации к сишным либам не описаны сигналы и свойства.

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

>и очень сомневаюсь, что биндинги будут менять дефолтное поведение

Ну это само-собой. Я веду речь про протухшую документацию к биндингам. У меня она в генте кстати тоже from scratch собирается…

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

>я цитировал сишную

Я так и понял. Еще раз спасибо!

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