2012-05-21 20 views
2

我正在使用PyGObject,但我認爲這是一個可以適用於所有GTK的問題,所以如果有人知道如何使用C或任何東西應該在Python中工作。Gtk.Treeview通過信號和代碼取消選擇

我有兩個treeview,活動和不活動,我從Sqlite數據庫加載數據,我可以交換和拖放項目從一個到其他。 這只是一個有趣的事情,如果我點擊一個樹狀圖上的一個項目,我希望取消選擇另一個上一個選定的項目。

似乎沒有人需要做類似的事情,因爲我沒有在網上發現任何東西。

+0

選擇模式是多重的嗎? –

+0

謝謝您的評論,目前沒有,這不是一個多選。這是一個單一的。我不知道今後是否會成爲使其成倍增長的原因。 – andyinno

回答

2

如果處於過於基本(也許我誤解了問題)的風險中,要操縱樹視圖選擇,請使用從GtkTreeView.get_selection返回的GtkTreeSelection對象。您可以附加到此對象上的信號,更改當前選擇等。

+0

你靠近解決方案,但讓我領先一步。我的問題的解決方案是:'self._treeview_enabled.connect('cursor-changed',self.treeview_row_selected)'並在名爲'selection = self._treeview_disabled.get_selection()selection.unselect_all()'的函數中感謝您指出我以正確的方式使用GtkTreeSelection對象,因爲我看到的並不簡單。 – andyinno

0

要關閉另一個視圖中的選擇,您可以獲取其選擇模式屬性並設置爲GTK_SELECTION_NONE。要打開它一旦點擊,我的想法是,你可以趕上grab-focus信號,設置選擇模式,即以單一的,並設置選擇模式無法比擬的另一種觀點:

(connect view-1 'grab-focus 
     (lambda args 
     (set-mode (gtk-tree-view-get-selection view-1) "GTK_SELECTION_SINGLE") 
     (set-mode (gtk-tree-view-get-selection view-2) "GTK_SELECTION_NONE"))) 

(即代碼使用的是包裝器guile-gnome,但在任何語言綁定中該概念都應該是相同的。)這種方法的問題是,現在爲了做出選擇,您必須單擊兩次樹視圖 - 一次抓取焦點,然後再次做出選擇。

+0

我沒有試過你的解決方案,但集中在我的,我認爲我的,使用get_selection和unselect_all比你更清潔。無論如何謝謝你的回覆, – andyinno