2012-01-02 15 views
1

139 cols * 121行のイメージマップを表示します。gtk.IconViewでイメージの読み込みを高速化します。

(画像サイズは32×32ピクセルである)

私はこのように、私はgtk.gdk.Pixbufで満たさgtk.ListStoregtk.Iconviewを使用:

(二次元リストは、画像を含むオブジェクトが含まれてい表示するパス)

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

私の問題は、画像のロード時間は、コンピュータの構成に応じて、かなり長くなることができるということです。

(長すぎる)(可)の4Gb RAMを搭載したIntelのCore i7のための人の
  • 〜20代の4Gb RAMを搭載したAMDのX2 4200+のための
  • 〜160S

どのような方法があります画像の読み込みを高速化するには? gtk.Iconviewの使用はおそらく最適ではありませんか?

おかげ

+1

PyGTK FAQに[関連するディスカッション](http://faq.pygtk.org/index.py?req=show&file=faq13.043.htp)があります。それが役に立たない場合は、おそらく何らかのオンデマンドローディング(IIRC Rhythmbox(またはそれはBansheeでしたか?))を実装することができますが、それは簡単ではないと思います。 –

+0

使用しているGTKのバージョンは?どのプラットフォームですか? – liberforce

+0

@ liberforce:Linux(x64)では2.24.0バージョンのPyGTKと2.24.8バージョンのGTKを使用しますが、ウィンドウにも同じ効果があります。 –

答えて

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に応答性を高めるためにも便利です。

関連する問題