6
votes

Objets personnalisés dans ListStore / Treestore

J'ai une liste L d'objets de ma classe A. Cette classe implémente __ str __ / __ rep __ , chaque objet a donc sa propre représentation de chaîne (non nécessaire). J'ai une interface graphique à Pygtk, où j'ai un widget TreeView avec une seule colonne. Je veux le remplir avec des représentations de chaîne des objets dans L, mais je veux ensuite obtenir des articles sélectionnés en tant qu'objets, pas en tant que chaîne. Existe-t-il un moyen de faire de TreeView pour stocker la liste d'objets, mais les afficher comme des piqûres? Sinon, quelle est la meilleure façon de savoir quels objets sont sélectionnés dans l'arborescence? Le problème est également que cela dépend de certaines conditions que je peux peupler l'arbusteview non pas avec l'ensemble de L, mais avec un subliste de celui-ci, et les index d'éléments de TreeView ne correspondent pas à ceux de L.


0 commentaires

3 Réponses :


6
votes

Vous pouvez stocker l'objet dans une colonne ( gobject.type_pyObject ) et la représentation de chaîne dans une deuxième colonne, puis affichez uniquement la deuxième colonne de votre arborescence. Semblable à ce qui est fait ici: http://www.learningpyThon.com/2006/09 / 02 / s'étend-notre-pygtk-application /


4 commentaires

Merci pour la réponse! Mais j'utilise Glade pour faire une interface graphique et il n'y a pas de type type_pybject dans la liste des types et tapez 'gobject' ne fonctionne pas :(


Vous pouvez définir le listStore dans votre code et définir toujours tout le reste de la Glade. Ensuite, utilisez simplement GTK.TREEVIEW .set_model . C'est ce que le blog post je suis lié à faire.


@Kirill Si vous utilisez Glade, vous voudrez peut-être indiquer cela dans votre question. Vous obtiendrez des réponses plus spécifiques à votre problème.


@Jeremy, désolé, j'étais inattentif;) Cela résout vraiment le problème, merci!



0
votes

Si les chaînes sont uniques, vous pouvez utiliser un dictionnaire pour relier les chaînes avec les objets en utilisant les cordes comme touches. Dans ce cas, vous pouvez trouver les objets par sa chaîne.


1 commentaires

Malheureusement, ils ne sont pas nécessaires uniques. Et je me demande s'il est possible de résoudre le problème sans que des dicts / listes supplémentaires, etc.



2
votes

Si votre Glade est 3.7.0 ou plus récente, vous pouvez taper "PyObject" (sans les guillemets) en tant que type de colonne pour votre répertoire. Ensuite, utilisez 0 commentaires