2015-11-02 43 views
0

顯然,在構造函數中使用listStore模型構建GTKListBox or Treeview中的項目的「正確」方法。如果我想使用Glade GUI項目,其中已經創建了一個列表框,並且參考builder.get_object("appsDocumentListBox")如何在Glade的預先創建的列表框上設置listStore模型?

我可以在Gtk.builder創建窗口後設置模型,還是有更好的方法來做到這一點?

我也想知道使用ListStore與手動添加row = Gtk.ListBoxRow(),添加內容和設置ListBox.add(row)的性能改進是什麼? (它可以從Glade構建器的Python窗口中工作)

與Treeview不同,顯然Listbox不會在構造函數之後設置模型?

>>> l = Gtk.ListBox() 
>>> l.set_model 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
AttributeError: 'ListBox' object has no attribute 'set_model' 

回答

2

你在混合兩件事。您可以創建一個GtkListBox並將GtkListBoxRow添加到它。這裏不需要額外的模型。

還有GtkListStoreGtkTreeStore。他們兩人都使用GtkTreeView。 ListStore有一個扁平的層次結構,TreeStore可以嵌套。 GtkTreeView具有set_model函數,因此您可以在創建模型後設置模型。您也可以直接在Glade中創建相應的模型。

如果您想要添加複雜的小部件,GtkListBox更適合。對於許多應該排序或分層結構的數據,我寧願使用GtkTreeView和相應的模型。

+0

如何爲Glade中的列表框創建模型?是的,我知道你可以將行添加到列表框中,但是如何處理激活行,將結構中的信息保存起來? – NoBugs

+0

您可以將任何小部件添加到列表框中,例如一個'GtkBox'。 ListBoxRow將在兩者之間自動創建。要處理激活,您可以連接到「行激活」信號,我不明白「保存結構中的信息」是什麼意思。 – elya5

+0

我不知道,但我已經添加了一行ListBox,並認爲這是做錯的方法。在行激活信號上,它只是通過列表框和行,所以當你創建可見標題時,沒有明顯的方式來獲取你所擁有的數據。 – NoBugs

相關問題