Python 如何在Glade预先创建的listbox上设置listStore模型?
显然,在构造函数中拥有项的“正确”方法是使用listStore模型进行构造。如果我想使用Glade GUI项目,其中已经创建了一个列表框,并且由Python 如何在Glade预先创建的listbox上设置listStore模型?,python,gtk,gtk3,glade,Python,Gtk,Gtk3,Glade,显然,在构造函数中拥有项的“正确”方法是使用listStore模型进行构造。如果我想使用Glade GUI项目,其中已经创建了一个列表框,并且由builder.get_object(“appsDocumentListBox”)引用,该怎么办 我可以在Gtk.builder创建窗口后设置模型吗,或者有更好的方法吗 我还想知道,与手动添加row=Gtk.ListBoxRow()、添加内容和设置ListBox.add(row)相比,使用ListStore的性能改进是什么?(在Glade builder
builder.get_object(“appsDocumentListBox”)
引用,该怎么办
我可以在Gtk.builder创建窗口后设置模型吗,或者有更好的方法吗
我还想知道,与手动添加row=Gtk.ListBoxRow()
、添加内容和设置ListBox.add(row)
相比,使用ListStore的性能改进是什么?(在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'
>l=Gtk.ListBox()
>>>l.set_模型
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
AttributeError:“ListBox”对象没有属性“set\u model”
你把两件事搞混了。您可以创建一个GtkListBox
并向其中添加GtkListBoxRow
s。这里不需要额外的型号
还有GtkListStore
和GtkTreeStore
。它们都使用GtkTreeView
。ListStore具有平面层次结构,TreeStore可以嵌套。
GtkTreeView有一个设置_model
功能,因此您可以在创建模型后设置模型。也可以直接在Glade中创建相应的模型
如果您想要添加复杂的小部件,那么
GtkListBox
更合适。对于许多应该排序或分层结构的数据,我宁愿使用GtkTreeView
和相应的模型。如何为Glade中的列表框创建模型?是的,我知道您可以将行添加到列表框中,但是您如何处理激活行、将信息保存在结构中?您可以将任何小部件添加到列表框中,例如GtkBox
。ListBoxRow将在两者之间自动创建。要处理激活,您可以连接到行激活
信号,我不明白“将信息保存在结构中”是什么意思。我不知道这一点,但我在列表框中添加了一行,并认为这样做是错误的。在激活的行
信号上,它只传递列表框和行,因此没有明显的方法获取创建可见标题时的数据。您可以对自己的ListBoxRow进行子类化,并为其提供自己的方法,或者根据小部件的堆叠执行类似于get_child().get_text()
的操作。