![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| DarkTroll |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 7.5.2010 Репутация: нет Всего: нет |
Здравствуйте.
Я решил написать интереса ради файл-менеджер на 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 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 886 Регистрация: 17.2.2009 Репутация: 2 Всего: 17 |
Определять mime-type только для видимых айтемов у ListWidget + некоторый запас. mime-type-ы в процессе скроллинга запоминать и кэшировать. Вроде krusader так и делает.
Это сообщение отредактировал(а) Amp - 7.5.2010, 17:23 |
|||
|
||||
| DarkTroll |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 7.5.2010 Репутация: нет Всего: нет |
Amp, идея, кстати, интересная! Попробую так сделать позже, это должно еще ускорить отрисовку. Но решение моей проблемы (очень простое) в другом: я при каждом обращении к функции get_mime вызывал mimetypes.init(). Именно поэтому все и тормозило. Устранил - теперь все летает так же быстро как и без иконок!
|
|||
|
||||
| andreyVL |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 24.5.2009 Репутация: нет Всего: нет |
DarkTroll, поделись скриптом гюи
уже не надо. Это сообщение отредактировал(а) andreyVL - 9.5.2010, 09:46 |
|||
|
||||
| DarkTroll |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 7.5.2010 Репутация: нет Всего: нет |
andreyVL, что ты имеешь ввиду?
|
|||
|
||||
| andreyVL |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 24.5.2009 Репутация: нет Всего: нет |
||||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Python: Разработка GUI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |