我也有这个问题,文档不清楚。但这里是我的发现,当你有
tvcolumn.set_sort_column_id(0)
但是你仍然绑定信号的TreeModel
“行重新排序”信号发出。
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()
请注意,Gtk文档声明“当DND重新排序行时,此信号不会被发出,因为这是通过删除然后重新插入行来实现的。 – alldayremix 2013-09-29 18:35:49