尝试从 Python 创建 GtkTreeView,似乎不起作用

尝试从 Python 创建 GtkTreeView,似乎不起作用

我正在使用 Gtk/PyGI 编写一个应用程序,我需要创建一个侧边栏鹦鹉螺状的树

但是,Gtk 拒绝与我合作。我尝试使用 Glade 和 GtkBuilder(创建带有一列的 GtkTreeStore gchararray)以及以下代码:

def create_widgets(self):
  self.hbox = Gtk.Box(orientation = Gtk.Orientation.HORIZONTAL)
  self.add(self.hbox)
  self.treestore = Gtk.TreeStore(str)
  self.treeview = Gtk.TreeView(self.treestore)
  self.treestore.append(["Item 1"])
  self.treestore.append(["Item 2"])
  self.hbox.pack_start(self.treeview, True, True, 0)

两个版本都从我的代码中TypeError: Expected Gtk.TreeIter, but got StructMeta开始self.treestore.append(),然后逐渐渗透到库的文件中。

我认为这是因为 GtkTreeStore.append也采用了 GtkTreeIter,但如果我传递类似“0”的东西作为第一个参数,则什么都不会改变;如果我传递类似的东西,self.treestore.get_iter("0")它会出错,说它是一个无效的树路径;如果我传递None它可以工作,但显示一扇空窗户

我尝试用 GtkListStore 替换 GtkTreeStore。结果没有出错 - 相反,它显示和之前一模一样的空窗户

那么,我做错了什么?我经历了文档我一次又一次地问,但我还是没能找到答案。

答案1

AGtk.TreeStore和 的Gtk.ListStore不同之处在于,aGtk.ListStore是一个平面列表,您可以在其中将行作为列表添加,而 aGtk.TreeStore包含父/子数据,因此它将父级作为,Gtk.TreeIter并将列表作为行。

parent_iter = treestore.append(None, ["parent row"])
treestore.append(parent_iter, ["child row"])

http://python-gtk-3-tutorial.readthedocs.org/en/latest/treeview.html#Gtk.TreeStore.append

至于空窗口,看看视图文档部分。

答案2

我碰到了这个使用 TreeStore 的演示:http://git.gnome.org/browse/pygobject/tree/demos/gtk-demo/gtk-demo.py

相关内容