1

モデルをgtk.TreeView使用した単純なものがあり、ユーザーがリストをドラッグアンドドロップして並べ替えたときに発生するシグナル/イベントをキャッチしたいのですが、ドキュメントはあまり役に立ちません。gtk.ListStoreset_reorderable(True)

「アプリケーションは、モデルの信号に接続することで、これらの変更を聞くことができます」

そこで、モデル(ListStore)の信号を接続しようとしました...しかし驚きました!ListStoreにはシグナルがないため、TreeModelシグナルにディスパッチされた後、TreeModelの「rows-reordered」シグナルに接続しようとしましたが、幸運はありませんでした。

ユーザーが実行したリストの並べ替えをどのようにキャッチする必要がありますか?

4

2 に答える 2

3

現在、PyGTKでそれを行う方法はありません。「rows-reordered」は正しいシグナルですが、PyGTKでは「なんらかの方法でreordered」以外の情報を引き出すことはできません。C GTK +では、同じシグナルを使用してコールバックで必要な情報を取得できますが、Pythonでは取得できません。

于 2010-05-14T16:32:43.420 に答える
0

私もこの問題を抱えていて、ドキュメントは不明確です。しかし、これが私が見つけたものです

'rows-reordered'シグナルは、次の場合に発行されます。

tvcolumn.set_sort_column_id(0)

ただし、シグナルをツリーモデルにバインドします。

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

これにより、表示されている列ヘッダーがクリック可能になります。列ヘッダーをクリックすると、ツリー内のアイテムが昇順で並べ替えられ、もう一度クリックすると降順で並べ替えられます。

これが、私が何を意味するのかをテストして確認できる簡単なコードです。

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()
于 2010-11-26T06:34:01.680 に答える