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

发布于 2024-09-16 14:39:58 字数 645 浏览 10 评论 0原文

我正在开发一个用 python 编写的 GTK+ 应用程序。我显然使用 PyGtk。我的应用程序是关于视频集合的。它类似于 F-spot 或 Picasa,但用于视频。

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

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

一个 gtk.Table 包含一个 VBox,在 VBox 内有一个 Pixbuf (我的视频缩略图)和一个 HBox,并且在 HBox 内有与标签一样多的 Pixbuf

它有效,但很丑陋,而且似乎不是更好的解决方案。

深入查看文档,我发现了两个接近我需要的小部件:IconViewTreeView。但是 IconView 每“行”只能显示一个 pixbuf,并且 TreeView 不能像 IconView 那样显示为网格。

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

I am working on a GTK+ application written in python. I obviously use PyGtk. My application is about collections of videos. It's a kind of F-spot or Picasa, but for video.

As you can see in these two apps, you have a central area where you can see all of your photos with tag thumbnails under.

In my app, I want to implement the same kinf of view. For now I simply use this:

A gtk.Table containing a VBox, inside the VBox a Pixbuf (my video thumbnail) and a HBox, and inside the HBox, as many Pixbuf as tags.

It's working but it's ugly and It seems like It's not the better solution.

Looking deeply in the docs, I have found two widgets near my neeeds: IconView and TreeView. But IconView can only display one pixbuf per "row" and TreeView don't display as a grid like IconView.

My question: Is there a way to display a TreeView like an IconView (in a grid) ?
How would you implement the F-spot way of arranging photos and tags under?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

绻影浮沉 2024-09-23 14:39:58

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()

IconView is what you need. In the ListStore every row represent just one pixbuf but the IconView adjusts the images in a grid. Here a small example, launch it with the image files you want to show as arguments, for example:

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()
刘备忘录 2024-09-23 14:39:58

最好的方法是要么坚持使用表格并重新实现选择,要么使用 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

The best approach is either to stick with a table and reimplement selections or Use a custom version of IconView with a custom cellrenderer wich can take gtk.HBox().

Some guidelines about custom cellrenderer are :

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

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

a discuss occured on pygtk mailing list :

htp://old.nabble.com/Drawing-widgets-in-a-custom-cellrenderer-td14207692.html

WWWalter make a sample code :
http://www.translate.org.za/blogs/walter/en/content/conquering-cellrendererwidget

According to Ruben Vermeersch, f-pot use a modified version of IconView. Code can be found here :
http://git.gnome.org/browse/f-spot/?h=icon-view-cleanup

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文