2012-10-14 53 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)