加快 gtk.IconView 中的图像加载速度

发布于 2024-12-24 00:16:11 字数 851 浏览 2 评论 0原文

我想显示 139 列 * 121 行的图像图。

(图像大小为 32*32 px)

我使用 gtk.Iconviewgtk.ListStore,并用 gtk.gdk.Pixbuf 填充>,像这样:(

二维 graph 列表包含包含要显示的图像路径的对象)

pixbuf_passage = gtk.gdk.pixbuf_new_from_xpm_data(xpmdata)
for row in graph :
    for col in row :
        pixbuf = gtk.gdk.pixbuf_new_from_file(col.img_base)

        if col.passage :
            pixbuf_passage.composite(pixbuf, 0, 0, pixbuf_passage.props.width, pixbuf_passage.props.height, 0, 0, 1.0, 1.0, gtk.gdk.INTERP_BILINEAR, 255)

        self.grid.listStore.append([pixbuf, tooltip])

我的问题是图像加载时间可能会很长,具体取决于计算机的配置:

  • ~20s对于具有 4Gb RAM 的 Intel Core i7(可以接受),
  • 对于具有 4Gb RAM 的 AMD X2 4200+ 约为 160 秒(太长)

有什么方法可以加快图像加载速度? 也许在这里使用 gtk.Iconview 不是最佳选择?

谢谢

I want to display a 139 cols * 121 rows image map.

(The image size is 32*32 px)

I use a gtk.Iconview with a gtk.ListStore that I fill with gtk.gdk.Pixbuf, like this :

(the two dimensional graph list contains objects that contain the images path to display)

pixbuf_passage = gtk.gdk.pixbuf_new_from_xpm_data(xpmdata)
for row in graph :
    for col in row :
        pixbuf = gtk.gdk.pixbuf_new_from_file(col.img_base)

        if col.passage :
            pixbuf_passage.composite(pixbuf, 0, 0, pixbuf_passage.props.width, pixbuf_passage.props.height, 0, 0, 1.0, 1.0, gtk.gdk.INTERP_BILINEAR, 255)

        self.grid.listStore.append([pixbuf, tooltip])

My problem is that the image loading time can be quite long, depending on the computer's configuration :

  • ~20s for a Intel Core i7 with 4Gb RAM (which is acceptable)
  • ~160s for a AMD X2 4200+ with 4Gb RAM (which is too long)

Is there any way to speed up the image loading ?
Perhaps the use of a gtk.Iconview isn't optimal here ?

Thanks

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

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

发布评论

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

评论(1

所有深爱都是秘密 2024-12-31 00:16:11

PyGTK 常见问题解答对此提供了一些提示。最重要的似乎是您应该在添加大量条目时冻结树视图/图标视图并暂时取消设置其模型。

treeview.freeze_child_notify()
treeview.set_model(None)

# Add rows to the model
# ...

treeview.set_model(model)
treeview.thaw_child_notify()

使用 g_idle_add 的技巧对于增加 UI 的响应速度也很有用。

The PyGTK FAQ has a few tips for this. The most important seems to be that you should freeze the treeview/iconview and unset its model temporarily while adding a lot of entries.

treeview.freeze_child_notify()
treeview.set_model(None)

# Add rows to the model
# ...

treeview.set_model(model)
treeview.thaw_child_notify()

The trick using g_idle_add is also useful to add more responsiveness to the UI.

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