Поймать PyGTK TreeView переупорядочить - PullRequest
1 голос
/ 14 мая 2010

У меня есть простое gtk.TreeView с моделью gtk.ListStore и set_reorderable(True), я хочу уловить сигнал / событие, генерируемое, когда пользователь изменяет порядок, путем перетаскивания списка, но документация мало помогает:

«Приложение может прослушивать эти изменения, подключившись к сигналам модели»

Итак, я попытался подключить сигналы модели (ListStore) ... но сюрприз! В ListStore нет сигналов, поэтому вы отправляете сигналы TreeModel, затем я попытался соединиться с сигналом TreeModel «переупорядоченный ряд», но не повезло.

Как мне отследить переупорядочение списка, выполненное пользователем?

Ответы [ 2 ]

3 голосов
/ 14 мая 2010

Нет способа сделать это в PyGTK в настоящее время. «row-reordered» является правильным сигналом, но из PyGTK невозможно извлечь из него какую-либо информацию, кроме как «каким-либо образом упорядоченным» В C GTK + вы можете использовать тот же сигнал и получать необходимую информацию в обратном вызове, но не в Python.

0 голосов
/ 26 ноября 2010

У меня тоже была эта проблема, и документы неясны.Но вот что я обнаружил

'Строки-переупорядоченный' сигнал испускается, когда у вас есть

tvcolumn.set_sort_column_id(0)

Однако вы все равно привязываете сигнал к модели дерева.Это приведет к тому, что видимый заголовок столбца станет кликабельным.Если щелкнуть заголовок столбца, он упорядочит элементы в дереве в порядке возрастания, а затем в порядке убывания, если щелкнуть его еще раз и обратно.

Вот простой код, который можно проверить и увидетьчто я имею в виду.

import pygtk
pygtk.require('2.0')
import gtk

class BasicTreeViewExample:

    def __init__(self):
        window = gtk.Window(gtk.WINDOW_TOPLEVEL)
        window.set_title("Treeview")
        window.set_size_request(200, 200)
        window.connect("destroy", lambda w: gtk.main_quit())

        treestore = gtk.TreeStore(str)
        treestore.connect("rows-reordered", self.rows_reordered)

        for i in range(4):
            piter = treestore.append(None, ['Item %i' % i])

        treeview = gtk.TreeView(treestore)

        tvcolumn = gtk.TreeViewColumn('Click Me!')

        treeview.append_column(tvcolumn)

        cell = gtk.CellRendererText()

        tvcolumn.pack_start(cell, True)

        tvcolumn.add_attribute(cell, 'text', 0)

        # This allows the column header ("Click me!") to be clickable and sort/order items
        tvcolumn.set_sort_column_id(0)

        window.add(treeview)
        window.show_all()


    def rows_reordered(self, a, b, c, d):
        print a
        print b
        print c
        print d


def main():
    gtk.main()

if __name__ == "__main__":
    tvexample = BasicTreeViewExample()
    main()
...