我正在使用 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