J'écris une application en utilisant Gtk/PyGI, et j'ai besoin de créer une barre latérale avec un arbre semblable à Nautilus .
Cependant, Gtk refuse de coopérer avec moi. J'ai essayé à la fois avec Glade et GtkBuilder (création du GtkTreeStore avec une colonne gchararray
) et avec ce code:
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)
Les deux versions soulèvent un TypeError: Expected Gtk.TreeIter, but got StructMeta
Commençant à la première self.treestore.append()
dans mon code et descendant dans les fichiers de la bibliothèque.
Je pensais que c'est parce que .append
De GtkTreeStore prend également un GtkTreeIter, mais si je passe quelque chose comme "0" comme premier argument, rien ne change, si je passe quelque chose comme self.treestore.get_iter("0")
il se trompe en disant que c'est un chemin d'arbre invalide, et si je passe None
ça marche, mais montre ne fenêtre vide .
J'ai essayé de remplacer le GtkTreeStore par un GtkListStore. Le résultat ne génère pas d'erreur - à la place, il affiche la même fenêtre vide qu'avant .
Alors, qu'est-ce que je fais mal? J'ai parcouru les docs maintes et maintes fois, mais je ne peux toujours pas le comprendre.
UNE Gtk.TreeStore
et Gtk.ListStore
sont différents en ce qu'un Gtk.ListStore
est une liste plate dans laquelle vous ajoutez des lignes sous forme de liste, tandis qu'un Gtk.TreeStore
contient les données parent/enfant, il prend donc le parent comme Gtk.TreeIter
et une liste sous forme de ligne.
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
Quant à la fenêtre vide, jetez un oeil à la section vues de la documentation.
Je suis tombé sur cette démo qui utilise un TreeStore: http://git.gnome.org/browse/pygobject/tree/demos/gtk-demo/gtk-demo.py