2012-10-14 51 views
3

如何在树状视图中向上或向下移动选择?Python GTK3 Treeview向上或向下移动选择

这个想法是,我可以有一个向上和向下按钮将选择向上或向下移动一行。

我的Treeview正在使用一个ListStore。不知道这是否重要。

+0

您是否尝试过重新排序树模型(名单店)? – XORcist

+0

我认为有些人对你的编辑感到困惑,认为它会用另一种语言随意添加代码,而不会先阅读你的问题。我继续自己添加你的代码。 – Ancurio

回答

7

首先,我将使用C代码,因为这是我熟悉的。如果您在将问题转换为Python时遇到问题,请说出来,我会尽我所能提供帮助。

要用于此的类是GtkTreeSelection。基本上,你要做的就是:

  1. 获取视图的选择对象(gtk_tree_view_get_selection
  2. 获取当前被选中GtkTreeItergtk_tree_selection_get_selected)。
  3. AQUIRE下一/上ITER(gtk_tree_model_iter_next/previous
  4. 如果有一个(即如果前面的函数返回TRUE),使之成为当前选定的一个(gtk_tree_selection_select_iter

在我的小测试程序,为 “向下” 按钮的回调是这样的:

static void on_down(GtkWidget *btn, gpointer user_data) 
{ 
    GtkTreeSelection *sel = GTK_TREE_SELECTION(user_data); 
    GtkTreeModel *model; 
    GtkTreeIter current; 

    gtk_tree_selection_get_selected(sel, &model, &current); 
    if (gtk_tree_model_iter_next(model, &current)) 
     gtk_tree_selection_select_iter(sel, &current); 
} 

here参考完整的程序)

连接时,我将TreeSelection对象传递给回调函数。

编辑:这是塞缪尔·泰勒·如何翻译上面的Python:

TreeView = Gtk.TreeView() 
list = Gtk.ListStore(str, str) 
TreeView.set_model(list) 

def down(widget): 
    selection = TreeView.get_selection() 
    sel = selection.get_selected() 
    if not sel[1] == None: 
     next = list.iter_next(sel[1]) 
     if next: 
      selection.select_iter(next)