web-dev-qa-db-fra.com

Essayer de créer un GtkTreeView à partir de Python ne semble pas fonctionner

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.

3
Andy C.

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.

4
Timo

Je suis tombé sur cette démo qui utilise un TreeStore: http://git.gnome.org/browse/pygobject/tree/demos/gtk-demo/gtk-demo.py

0
Wayne