加快 gtk.IconView 中的图像加载速度
我想显示 139 列 * 121 行的图像图。
(图像大小为 32*32 px)
我使用 gtk.Iconview
和 gtk.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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
PyGTK 常见问题解答对此提供了一些提示。最重要的似乎是您应该在添加大量条目时冻结树视图/图标视图并暂时取消设置其模型。
使用 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.
The trick using g_idle_add is also useful to add more responsiveness to the UI.