Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在Glade预先创建的listbox上设置listStore模型?_Python_Gtk_Gtk3_Glade - Fatal编程技术网

Python 如何在Glade预先创建的listbox上设置listStore模型?

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

显然,在构造函数中拥有项的“正确”方法是使用listStore模型进行构造。如果我想使用Glade GUI项目,其中已经创建了一个列表框,并且由
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()
的操作。