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

时间:2019-09-05 16:58:15

标签: gtk glade

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

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

  1. Glade只允许我在ListBoxRow内添加ListBox
  2. 这些行将是ListBox的一部分,而不是我可以克隆的外部行。
  3. 我没有看到“克隆”窗口小部件层次结构的GTK函数,因此我无法将这些行作为实际的窗口小部件然后进行克隆。

使用Google搜索来寻找答案,things like this固守在TreeView上并为其设置模型,但是我需要ListBox,因为我需要自由定制的行。

我考虑过将行节点提取到单独的XML中,并且每次使用新的构建器从该新XML重新创建新行并填充数据。可以,但是感觉很笨拙,不能表现得太好-必须有更好的方法!

有官方的方法吗?

1 个答案:

答案 0 :(得分:1)

您的问题实际上是多方面的,所以去吧。

  1. 通过添加一行,然后将其拖放到ListBoxRow之外,可以在Listbox之外添加ListBox。这样,您可以使用以下方式将行(稍后显示)添加到Listbox中:

    listbox = self.builder.get_object("listbox") row = self.builder.get_object("row") listbox.insert(row, 0)

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

3。如果小部件和ListBoxRow恰好是静态的,则可能需要考虑在代码中生成它们。对于定期在Glade文件中更新的窗口小部件,这将无法正常工作。