| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Python: Разработка GUI > MIME-type & icons |
| Автор: DarkTroll 7.5.2010, 15:31 | ||||||
| Здравствуйте. Я решил написать интереса ради файл-менеджер на PyQt. Для отображения содержимого каталогов выбрал QListWidget. Все бы хорошо, да не могу написать эффективный алгоритм ассоциации определенному типу файлов определенной иконки. Процесс я представляю так: 1. Получаю список файлов в директории средствами модуля os 2. Создаю цикл for и в нем: a) Для каждого элемента списка определяю его MIME-тип b) По MIME-типу определяю иконку и назначаю ее соответствующему файлу. Но все это ОЧЕНЬ медленно работает при большом количестве файлов в каком-либо каталоге. Например, для отображения содержимого /usr/bin (около 2,5 тысяч файлов) уходит 16 секунд, а если без определения типа файла, то меньше секунды. Причем тормозит не отрисовка элементов компонента QListWidget, а именно определение MIME-типа. Подскажите пожалуйста, где можно упростить, оптимизировать мой корявый код или подскажите, как можно иначе реализовать ассоциацию иконки файлу? Вот листинги соответствующих функций: list_print: функция, отображающая содержимое каталога:
get_mime: функция, определяющая MIME-тип:
get_mime_icon: функция, назначающая иконку файлу
|
| Автор: Amp 7.5.2010, 17:23 |
| Определять mime-type только для видимых айтемов у ListWidget + некоторый запас. mime-type-ы в процессе скроллинга запоминать и кэшировать. Вроде krusader так и делает. |
| Автор: DarkTroll 7.5.2010, 18:07 |
| Amp, идея, кстати, интересная! Попробую так сделать позже, это должно еще ускорить отрисовку. Но решение моей проблемы (очень простое) в другом: я при каждом обращении к функции get_mime вызывал mimetypes.init(). Именно поэтому все и тормозило. Устранил - теперь все летает так же быстро как и без иконок! |
| Автор: andreyVL 8.5.2010, 08:55 |
| DarkTroll, поделись скриптом гюи уже не надо. |
| Автор: DarkTroll 13.5.2010, 15:57 |
| andreyVL, что ты имеешь ввиду? |
| Автор: andreyVL 13.5.2010, 17:14 |
| отбой тревоги. уже сделал |