2010-08-29 5 views
2

Je travaille sur une application GTK + écrite en python. J'utilise évidemment PyGtk. Mon application concerne les collections de vidéos. C'est une sorte de F-spot ou de Picasa, mais pour la vidéo.Est-ce possible de dessiner GtkTreeView comme GtkIconView?

Comme vous pouvez le voir dans ces deux applications, vous disposez d'une zone centrale où vous pouvez voir toutes vos photos avec des vignettes de balises sous.

Dans mon application, je veux mettre en œuvre la même kinf de vue. Pour l'instant j'utilise simplement ceci:

A gtk.Table contenant un VBox, à l'intérieur du VBox un Pixbuf (ma vignette vidéo) et un HBox, et à l'intérieur du HBox, autant Pixbuf sous forme de balises.

Ça marche mais c'est moche et on dirait que ce n'est pas la meilleure solution. En regardant profondément dans les docs, j'ai trouvé deux widgets près de mes besoins: IconView et TreeView. Mais IconView peut seulement afficher un pixbuf par "rangée" et TreeView ne s'affichent pas comme une grille comme IconView.

Ma question: Existe-t-il un moyen d'afficher un TreeView comme un IconView (dans une grille)? Comment mettriez-vous en place la manière F-spot d'organiser les photos et les tags?

+0

Je ne suis pas dans moi-même, mais il semble qu'il pourrait être possible d'implémenter un 'CellRenderer 'personnalisé et' pack_end' dans le 'IconView'? – bobince

Répondre

0

La meilleure approche est soit de coller avec une table et réimplémentez sélections ou utiliser une version personnalisée de IconView avec un CellRenderer personnalisé Wich peut prendre gtk.HBox().

Quelques directives sur CellRenderer personnalisées sont:

http://faq.pygtk.org/index.py?req=show&file=faq13.045.htp

http://faq.pygtk.org/index.py?req=show&file=faq13.056.htp

une SURVENU discuter sur la liste de diffusion pygtk:

htp: //old.nabble.com/Drawing-widgets WWWalter make un exemple de code:Selon Ruben Vermeersch, f-pot utilise une version modifiée d'IconView. Code peut être trouvé ici: http://git.gnome.org/browse/f-spot/?h=icon-view-cleanup

1

IconView est ce dont vous avez besoin. Dans le ListStore chaque ligne représente un seul pixbuf mais le IconView ajuste les images dans une grille. Voici un petit exemple, lancez-le avec les fichiers d'image que vous voulez montrer comme arguments, par exemple:

python example.py /usr/share/icons/hicolor/16x16/apps/* 

.

import sys 
import gtk 


store = gtk.ListStore(gtk.gdk.Pixbuf) 
iv = gtk.IconView(store) 
iv.set_pixbuf_column(0) 
for arg in sys.argv[1:]: 
    pixbuf = gtk.gdk.pixbuf_new_from_file(arg) 
    store.append((pixbuf,)) 

w = gtk.Window() 
w.connect('destroy', lambda w: gtk.main_quit()) 
sw = gtk.ScrolledWindow() 
w.add(sw) 
sw.add(iv) 
w.show_all() 
gtk.main() 
+0

peut-être que je ne m'explique pas assez clairement: je suis capable de rendre mes vidéos en miniature dans un IconView déjà mais je ne suis pas capable de rendre dans la même cellule ma vignette vidéo et ma vignette. Pour une meilleure explication, vous pouvez juste regarder l'interface utilisateur de f-spot. C'est la raison pour laquelle je suis à la recherche de treemodel/treeview où vous pouvez définir les parents et les enfants. parents pour ma vignette de la vidéo, enfant pour chaque vignette de la balise attachée à celle-ci. Malheureusement, treeview ne peut pas afficher comme une grille comme IconView – boblefrag

+0

Je suis désolé mais je ne peux pas ce que la vignette est. Pouvez-vous mieux l'expliquer? N'est-ce pas une étiquette pour la vignette? –

+0

bien sûr, prenez une grille, dans chaque cellule mettre une photo, ceci est ma vignette vidéo. Sous chaque vignette de la vidéo, mettez une petite photo alignée dans une rangée: ceci est mon tag vignettes. – boblefrag

Questions connexes