fitz 29.11.2012 19:27
Python — Совместное использование QtDesigner и PyQt4
Сдуваю пыль с Python-блога своим первым постом.В этой небольшой заметке речь пойдет о том, как максимально быстро просто прицепить GUI форму, которую вы намышекликали QtDesigner'e, к приложению на Python.
В процессе изучения Питона начал читать книгу Марка Саммерфилда "Rapid GUI programming with Python and Qt" аж 2007 года редакции. С Qt знаком давно и крайне ему симпатизирую. В главе об использовании QtDesigner приводится следующая инструкция:
Для того, чтобы скомпилировать .ui файл из QtDesigner'а в класс на python используется команда:
1 |
|
В итоге импортим полученный класс и цепляем нашу форму:
Если вы пользователь Эклипса, то упростить данную процедуру можно с помощью следующего костылика:
1. Идем Run -> External Tools -> External Tools Configurations ...
2. В появившемся диалоги жмем 'New' слева сверху
3. В графе 'Name' вводим 'PyUIC'
4. В графе 'Location' вводим путь, например, "C:\Python26\Python.exe"
5. В графе 'Arguments' вводим '"C:\Python26\Lib\site-packages\PyQt4\uic\pyuic4.py" "${resource_loc}"' или другой путь к установленному PyQt4 (не забудьте, что двойные кавычки нужны)
6. Переходим на вкладку 'Common', отмечаем 'File', а в разделе 'Standard Input/Output' вводим '${resource_loc}.py'
7. Переходим на вкладку 'Build', снимаем галку с 'Build before launch'
8. Переходим на вкладку 'Refresh', отмечаем 'Refresh resources upon completion'
9. Жмем 'Apply' потом 'Run'
Использование:
1. Выбираем .ui файл в 'PyDev Package Explorer' в левой части окна Эклипса
2. Жмем 'Run PyUIC' в тулбаре
3. Новый файл с окончанием .ui.py появится в соответствующей папке
В линуксе, полагаю, все налаживается аналогичным образом, но сказать, что это лучшее решение на сегодняшний момент, язык не поворачивается.
Однако ни Марк, ни анонимный источник отчего-то не пишут о возможности PyQt4 загружать .ui итерфейс через модуль uic, чтобы не генерировать каждый раз новый код через pyuic/pyuic4.
Что ж, уличив самого Саммерфилда в ...ммм ретроградстве, теперь делаем все это просто и компактно:
Таким образом отпадает необходимость каждый раз при изменении формы в QtDesigner'e перекомпилировать ее в класс Python. Стоит ли говорить, что сама .ui форма отделена не только от платформы, но и от языка, а это, на мой взгляд, очень элегантное и эффективное решение.

+ 0 -
Спасибо за статью. Раньше как то всегда опасался pyqt, но сейчас думаю могу смелее посмотреть в его сторону.
прикрутите все счастье к parrot и коммунизм настанет. нет - я серьезно. у меня даже что-то запускалось )
у меня даже что-то запускалос
Обнадёживающе. :)
Но хотелось бы именно нативно. Я когда-то давно с tk работал на perl'е, но вот по поводу qt не сильно искал, честно говоря, но так как давно уже на кеды перелез, было бы интересно почитать для общего образования, а то мало ли, понадобится гуёвину какую сварганить по-быстрому.
super() необязателен. И без него все отлично работает. Или хочется вместо self.ui использовать просто self?
За идею не вызывать инициализацию родительского класса из переопределённого инита - по рукам бить надо. Даже если тот инит ничего не делает.
Кусочек Makefile (http://code.google.com/p/flacon/source/browse/Makefile) относящийся к формам. Возможно будет полезен.