2010-08-29 48 views
2

我正在使用python编写的GTK +应用程序。我明显使用PyGtk。我的应用程序是关于视频的集合。这是一种F-spot或Picasa,但是用于视频。是否可以绘制像GtkIconView一样列出的GtkTreeView?

正如您在这两个应用程序中看到的,您有一个中心区域,您可以在其中使用标签缩略图查看所有照片。

在我的应用程序中,我想实现相同的视角。现在我只是用这个:含

一个gtk.Table一个VBox,该VBox一个Pixbuf(我的视频缩略图)和HBox,并HBox内内,尽可能多的为Pixbuf标签。

它的工作,但它的丑陋,它似乎不是更好的解决方案。

深入研究文档,我发现靠近我的neeeds有两个小工具:IconViewTreeView。但IconView每个“行”只能显示一个pixbuf,而TreeView不显示为像IconView这样的网格。

我的问题:有没有像显示图标型控件的一个TreeView(在网格中)的方法吗? 您将如何实施F-Spot安排照片和标签的方式?

+0

我还没有涉足这个自己,但它看起来像它可能实现一个自定义的'CellRenderer'和'pack_end'到'IconView'中? – bobince 2010-08-29 23:54:44

回答

0

最好的办法是要么坚持使用一个表,并重新实现选择或使用图标型控件的定制版采用了自定义CellRenderer至极可以采取gtk.HBox()。

关于自定义CellRenderer一些指导原则是:

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

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

一个讨论发生PyGTK的邮件列表:

HTP://old.nabble.com/Drawing-widgets -in-A-定制的CellRenderer-td14207692.html

WWWalter做出示例代码: http://www.translate.org.za/blogs/walter/en/content/conquering-cellrendererwidget

根据Ruben Vermeersch的说法,f-pot使用IconView的修改版本。代码可以在这里找到: http://git.gnome.org/browse/f-spot/?h=icon-view-cleanup

1

IconView是你需要的。在ListStore中,每行只代表一个pixbuf,但IconView调整网格中的图像。这里有一个小例子,用你想显示的图像文件启动它作为参数,例如:

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

也许我不解释自己不够清楚:我能恩使我的影片缩略图的图标型控件已经但是我不能在同一小区内我的视频缩略图和标签的缩略图相对渲染它。为了更好的解释,你可以看看f点ui。 这就是我寻找treemodel/treeview的原因,您可以在其中定义父母和孩子。 父母为我的视频缩略图,孩子为每个附加到它的标签缩略图。 不幸的是,treeview不能显示为像IconView的网格 – boblefrag 2010-08-31 16:29:21

+0

对不起,但我不能用什么标记缩略图。你能更好地解释它吗?它不是缩略图的标签吗? – 2010-08-31 18:34:04

+0

确定,拿一个网格,在每个单元格中放一张照片,这是我的视频缩略图。在每个视频缩略图下方,将一些较小的照片放在一排中:这是我的缩略图标记。 – boblefrag 2010-08-31 21:43:57