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

How to use Glade to prepare ListBoxRow templates that can be created and filled programatically at runtime?

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

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

  1. Glade 只允许我在 ListBox.
  2. 中添加 ListBoxRows
  3. 这些行将成为 ListBox 的一部分,而不是我可以克隆的外部行。
  4. 我没有看到 "cloning" 小部件层次结构的 GTK 函数,因此我无法将这些行作为实际小部件然后克隆它们。

谷歌搜索答案让我找到 things like this,它专注于 TreeView 并为其设置模型,但我需要一个 ListBox,因为我需要可自由定制的行。

我考虑过将行节点提取到单独的 XML 中,并且每次都使用一个新的构建器从那个新的 XML 中重新创建一个新行并填充数据。这行得通,但感觉很笨拙,而且性能不太好 - 必须有更好的方法!

有官方的方法吗?

你的问题其实是多方面的,所以就这样吧。

  1. 可以在 Listbox 之外添加一个 ListBoxRow,方法是添加一行,然后将其拖放到 ListBox 之外。通过这种方式,您可以使用类似以下内容将行(稍后显示)添加到 Listbox

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

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

3.You 可能想考虑在代码中生成您的小部件和 ListBoxRow,如果它们恰好是相当静态的。这不适用于定期在 Glade 文件中更新的小部件。