是否可以绘制像GtkIconView一样列出的GtkTreeView?

时间:2010-08-29 22:50:18

标签: python gtk pygtk gtktreeview

我正在研究用python编写的GTK +应用程序。我显然使用PyGtk。我的应用程序是关于视频集合。它是一种F-spot或Picasa,但适用于视频。

正如您在这两个应用中看到的那样,您有一个中心区域,您可以在其中查看带有标记缩略图的所有照片。

在我的应用中,我希望实现相同的视图。现在我只想用它:

gtk.Table VBox VBox(我的视频缩略图)和Pixbuf内以及HBox内的HBox Pixbuf },与标签一样多IconView

它正在工作,但它很丑陋,看起来它不是更好的解决方案。

深入研究文档,我发现我的需求附近有两个小部件:TreeViewIconView。但IconView每个“行”只能显示一个pixbuf,而TreeView不会显示为{{1}}之类的网格。

我的问题:有没有办法像IconView一样显示TreeView(在网格中)? 你将如何实现F-spot方式安排照片和标签?

2 个答案:

答案 0 :(得分: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()

答案 1 :(得分:0)

最好的方法是坚持使用表格并重新实现选择,或者使用自定义版本的IconView和自定义的单元格,可以使用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-custom-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