Попытка создать GtkTreeView из Python, похоже, не работает
Я пишу приложение, используя 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's .append также принимает GtkTreeIter, но если я передам что-то вроде "0" в качестве первого аргумента, ничего не изменится, если я передам что-то вроде self.treestore.get_iter("0") он ошибается, говоря, что это неверный путь к дереву, и если я передам None это работает, но показывает пустое окно.
Я попытался заменить GtkTreeStore на GtkListStore. Результат не выдает ошибку - вместо этого он показывает то же самое пустое окно, что и раньше.
Итак, что я делаю не так? Я снова и снова просматривал документы, но все еще не могу понять.
2 ответа
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
Что касается пустого окна, взгляните на раздел представлений документов.
Я наткнулся на это демо, которое использует TreeStore: http://git.gnome.org/browse/pygobject/tree/demos/gtk-demo/gtk-demo.py