Gtk 如何使用Glade准备可以在运行时以编程方式创建和填充的ListBoxRow模板?

Gtk 如何使用Glade准备可以在运行时以编程方式创建和填充的ListBoxRow模板?,gtk,glade,Gtk,Glade,我想使用一个列表框,并向其中动态添加行。我想有几种类型的行,每种都有自己的组件和布局,在运行时,当我需要添加行时,我想使用这些行模板中的一个,从中创建一个新的ListBoxRow,在需要填充数据的地方填充数据,并将其添加到ListBox 我可以在代码中手动完成,但我想使用Glade来设计这些行。问题在于: Glade只允许我在列表框中添加ListBoxRows 这些行将是列表框的一部分,而不是我可以克隆的外部行 我没有看到用于“克隆”小部件层次结构的GTK函数,因此我无法将这些行作为实际的小部件

我想使用一个
列表框
,并向其中动态添加行。我想有几种类型的行,每种都有自己的组件和布局,在运行时,当我需要添加行时,我想使用这些行模板中的一个,从中创建一个新的
ListBoxRow
,在需要填充数据的地方填充数据,并将其添加到
ListBox

我可以在代码中手动完成,但我想使用Glade来设计这些行。问题在于:

  • Glade只允许我在
    列表框中添加
    ListBoxRow
    s
  • 这些行将是
    列表框的一部分,而不是我可以克隆的外部行
  • 我没有看到用于“克隆”小部件层次结构的GTK函数,因此我无法将这些行作为实际的小部件,然后克隆它们
  • 通过谷歌搜索答案,我会专注于
    TreeView
    并为其设置模型,但我需要一个
    ListBox
    ,因为我需要自由定制的行

    我考虑将行节点提取到单独的XML中,每次都使用一个新的构建器从新的XML中重新创建一个新行并填充数据。这是可行的,但感觉很粗糙,不能太过表现——必须有更好的方法


    有没有一个官方的方法可以做到这一点?

    你的问题实际上是多方面的,所以这里是

  • 通过添加一行,然后将其拖放到
    列表框
    ,可以将
    列表框行
    置于
    列表框
    之外。通过这种方式,您可以使用如下方法将行(稍后显示)添加到
    列表框中:

    listbox=self.builder.get\u对象(“listbox”)
    行=self.builder.get\u对象(“行”)
    listbox.insert(第0行)

  • 2.无法克隆或复制Glade小部件。有关更多详细信息,请参见此

    3.如果小部件和
    ListBoxRow
    s恰好是静态的,您可能需要考虑在代码中生成它们。对于在Glade文件中定期更新的小部件来说,这将不起作用