加速gtk.IconView中的图像加载

时间:2012-01-02 20:20:48

标签: python image gtk pygtk pixbuf

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

(图像尺寸为32 * 32像素)

我使用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+,
  • ~160s

有没有办法加快图片加载? 也许在这里使用gtk.Iconview不是最佳的?

由于

1 个答案:

答案 0 :(得分:1)

PyGTK FAQ有一些提示。最重要的似乎是你应该冻结treeview / iconview并暂时取消设置其模型,同时添加大量条目。

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的响应性也很有用。