显然,在GTKListBox or Treeview中拥有项目的“正确”方法是在构造函数中使用listStore模型构建。如果我想使用Glade GUI项目,其中已经创建了一个列表框并由builder.get_object("appsDocumentListBox")
引用了该怎么办?
我可以在Gtk.builder创建窗口后设置模型,还是有更好的方法来做到这一点?
我也想知道使用ListStore与手动添加row = Gtk.ListBoxRow()
,添加内容和设置ListBox.add(row)
的性能改进是什么? (它可以在Glade-builder 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'
答案 0 :(得分:2)
你混合了两件事。您可以创建GtkListBox
并向其添加GtkListBoxRow
。这里不需要额外的模型。
还有GtkListStore
和GtkTreeStore
。他们都使用GtkTreeView
。 ListStore具有平面层次结构,TreeStore可以嵌套。
GtkTreeView具有set_model
功能,因此您可以在创建模型后设置模型。您也可以直接在Glade中创建相应的模型。
如果您要添加复杂的小部件,GtkListBox
更适合。对于大量应该排序或分层结构的数据,我宁愿使用GtkTreeView
和相应的模型。