2012-01-02 113 views
1

我想顯示一個139 cols * 121行的圖像映射。在gtk中加速圖像加載.IconView

(圖像尺寸是32×32像素)

我使用gtk.Iconviewgtk.ListStore我填充gtk.gdk.Pixbuf,像這樣:

(二維列表包含包含該圖像中的物體路徑顯示)

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

我的問題是圖像加載時間可能很長,這取決於計算機的配置:

  • 〜20多歲的英特爾酷睿i7擁有4GB RAM(這是可以接受的)
  • 〜160S的AMD X2 4200 + 4GB內存(這是太長)

有什麼辦法加快圖像加載? 也許在這裏使用gtk.Iconview不是最優的?

感謝

+1

PyGTK FAQ中有一個[相關討論](http://faq.pygtk.org/index.py?req=show&file=faq13.043.htp),你可以試試。如果這沒有幫助,你可以實現某種按需加載(IIRC Rhythmbox(或者是Banshee?)這樣做),但是我認爲這並不容易。 – 2012-01-03 11:57:37

+0

您使用的是哪個版本的GTK?在哪個平臺上? – liberforce 2012-01-03 12:21:35

+0

@liberforce:我在Linux(x64)上使用PyGTK的2.24.0版本和GTK的2.24.8版本,但是在Windows上有相同的效果。 – 2012-01-03 17:58:05

回答

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的響應速度也很有用。