Я пишу приложение, используя Gtk / PyGI, и мне нужно создать боковую панель с деревом, похожим на Наутилус .
1112 Однако Гтк отказывается сотрудничать со мной. Я попробовал как с 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
, это работает, но показывает пустое окно .
Я попытался заменить GtkTreeStore на GtkListStore. Результат не выдает ошибку - вместо этого он показывает то же самое пустое окно, что и раньше .
1116 Итак, что я делаю не так? Я снова и снова просматривал документы , но до сих пор не могу понять.
A Gtk.TreeStore
и Gtk.ListStore
отличаются тем, что Gtk.ListStore
представляет собой плоский список, в который вы добавляете строки в виде списка, тогда как Gtk.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
Что касается пустое окно, взгляните на раздел представлений документации.
Я столкнулся с этой демонстрацией, в которой используется TreeStore: http://git.gnome.org/browse/pygobject/tree/demos/gtk-demo/gtk-demo.py