交换排序的TreeView

时间:2016-08-18 18:52:28

标签: python sorting treeview gtk pygtk

假设我有以下代码(更大类的重要内容):

    self.store = Gtk.ListStore(int)
    for i in range(10):
        self.store.append(i)
    sw = Gtk.ScrolledWindow()
    sw.set_shadow_type(Gtk.ShadowType.IN)
    sw.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
    self.treeView = Gtk.TreeView(self.store)
    self.create_columns(self.treeView)
    sw.add(self.treeView)

def create_columns(self, treeView):
    rendererText = Gtk.CellRendererText()
    column = Gtk.TreeViewColumn("Test", rendererText, text=1)
    column.set_spacing(50)
    column.set_fixed_width(180)
    column.set_sort_column_id(1)  
    column.set_resizable(True)
    treeView.append_column(column)

def move_item_up(self):
    selection = self.treeView.get_selection()
    selections, model = selection.get_selected_rows()
    for row in selections:
        if selection.iter_is_selected(row.iter) and row.previous:
            self.store.swap(row.iter, row.previous.iter)
            break

在打开窗口后,我会看到一个填充了值1-10的列。如果单击某列,则会根据值对列进行排序。如果我点击一次它从1-10点击,如果我点击两次它显示10-1。这是完美的,正是我想要的。

所以我对数组进行排序,然后我希望执行函数move-item-up。在排序之前,此函数按预期工作,但在排序后,我收到一条错误消息,例如gtk_list_store_swap: assertion 'iter_is_valid (a, store)' failed

有没有办法让阵列再次“未分类”?

1 个答案:

答案 0 :(得分:1)

这样的事情:

store.set_sort_column_id (Gtk.TREE_SORTABLE_UNSORTED_SORT_COLUMN_ID,
                          Gtk.SORT_ASCENDING);