LINUX.ORG.RU

[PyGTK] перерисовка gtk.IconView тормозит при загрузке thumbnail'ов

 


0

1

Приветствую.

Решил вот улучшить свою поделку. Сейчас добавляю возможность выбора различных вариантов предпросмотра картинок. Столкнулся с той проблемой, что gtk.IconView тормозит при загрузке этого самого предпросмотра, если у него включено отображение текста (т.е. установлено свойство markup-column с помощью метода set_markup_column()). При этом не важно отображается текст снизу иконки или справа. Тормоза начинают быть особо ощутимыми на больших списках — 500-1000 элементов и более.

Опишу вкратце алгоритм. Сначала у меня происходит загрузка картинок из директории в gtk.ListStore с пустым изображением в методе set_work_dir() класса MainApp (https://bitbucket.org/fat_angel/pybackdrop/src/9857878c8837/pybackdrop.py). Затем эта модель присобачивается к виджету и начинается неторопливая загрузка thumbnails в методе load_thumbnails() того же класса.

Самое веселое начинается тогда когда мы выбираем в качестве виджета gtk.TreeView или отрубаем показ текста у gtk.IconView — тормоза исчезают! И загрузка ~700 thumbnail'ов происходит где-то за 5 секунд — на мой взгляд вполне приемлемо.

Так вот, как бороться с тормозами в gtk.IconView при загрузке thumbnails при включенном отображении текста?

★★★★★
Ответ на: комментарий от baverman

>А тебе точно нужен текст с форматированием?

Ну да, хочется приятного интерфейса. В первой строке у меня пишется имя файла жирным, а во второй его разрешение обычным шрифтом.

Сейчас кстати попробовал поменять — пофиг. Все равно thumbnails безобразно долго загружаются.

Если я правильно понимаю, проблема тут в том, что виджет обновляется каждый раз после изменения модели или как то так.

fat_angel ★★★★★
() автор топика
Ответ на: комментарий от fat_angel

проблема тут в том, что виджет обновляется каждый раз после изменения модели или как то так.

Если бы это было так, то с отключенным текстом были тоже тормоза.

Пара замечаний общего характера:

1) Слишком часто вызываешь gtk.main_iteration()

2) Ни за что не поверю что get_thumbnail_for_file нет в виде сишной функции где-нибудь в самом gtk.

Вообще ситуация странная. Сейчас набросаю прототип, посмотрим, что да как.

baverman ★★★
()
Ответ на: комментарий от fat_angel

откуда эта кавайная девица

Старшая Цукамото из School Rumble.

baverman ★★★
()
Ответ на: комментарий от baverman

>Слишком часто вызываешь gtk.main_iteration()

Действительно! Сейчас его закоментировал и все стало загружаться за вменяемое время. Надо будет наверное ввести многопочность ил вызывать gtk.main_iteration() после каждых 50 (к примеру) проходов.

Ни за что не поверю что get_thumbnail_for_file нет в виде сишной функции где-нибудь в самом gtk


Если дашь ее имя, буду безмерно благодарен, ибо мне самому не нравится эта головная боль с ручным созданием и загрузкой thumbnails.

fat_angel ★★★★★
() автор топика
Ответ на: комментарий от fat_angel

http://pastie.org/1926429

Угу, без постоянного дерганья main_iteration загрузка отрабатывает в два раза быстрее, причем у меня они еще и скейлятся каждый раз.

Самая лучшая производительность была бы при организации загрузки следующим образом: если текущий айтэм находится за пределами окна, то картинку у модели обновлять с freeze/thaw_child_notify(), но это слишком гиморно.

P.S. Волшебной функции не нашел ((

baverman ★★★
()
Ответ на: комментарий от baverman

Спасибо за помощь. И спасибо за идею с дерганьем main_iteration() по времени.

fat_angel ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.