Ускорьте загрузку изображений в gtk.IconView - PullRequest
1 голос
/ 03 января 2012

Я хочу отобразить карту с изображением 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])

Моя проблема в том, что загрузка изображенийвремя может быть довольно продолжительным, в зависимости от конфигурации компьютера:

  • ~ 20 с для Intel Core i7 с 4 ГБ ОЗУ (что приемлемо)
  • ~ 160 с для AMD X2 4200+с 4Gb RAM (что слишком долго)

Есть ли способ ускорить загрузку изображения?Возможно использование gtk.Iconview здесь не оптимально?

Спасибо

1 Ответ

1 голос
/ 05 января 2012

FAQ 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 также полезна для добавления большей отзывчивости в пользовательский интерфейс.

...