我正在研究用python编写的GTK +应用程序。我显然使用PyGtk。我的应用程序是关于视频集合。它是一种F-spot或Picasa,但适用于视频。
正如您在这两个应用中看到的那样,您有一个中心区域,您可以在其中查看带有标记缩略图的所有照片。
在我的应用中,我希望实现相同的视图。现在我只想用它:
在gtk.Table
VBox
VBox
(我的视频缩略图)和Pixbuf
内以及HBox
内的HBox
Pixbuf
},与标签一样多IconView
。
它正在工作,但它很丑陋,看起来它不是更好的解决方案。
深入研究文档,我发现我的需求附近有两个小部件:TreeView
和IconView
。但IconView
每个“行”只能显示一个pixbuf,而TreeView不会显示为{{1}}之类的网格。
我的问题:有没有办法像IconView一样显示TreeView(在网格中)? 你将如何实现F-spot方式安排照片和标签?
答案 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