Поддержка сигналов и слотов в новом стиле, PyQt

Я пишу приложение с графическим интерфейсом на PyQt4 (Python3). Один мой друг указал, что использование pyuic4 является плохой практикой, и отослал меня к модулю uic и функциям подключения слотов по имени. У него не было времени объяснять больше, а ссылки, которые у меня есть, довольно короткие, я не мог понять из них идею (модуль пользовательского интерфейса, ЗагрузкаUIFilesво время выполнения, соединение слотов по имени).

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

Я мог бы следовать стандартным руководствам и делать простой графический интерфейс с помощью pyuic, но теперь чувствую себя немного запутанным... Любые хорошие примеры и/или ссылки приветствуются.


person Ekaterina Mishina    schedule 16.01.2012    source источник


Ответы (1)


Во-первых, использование pyuic4, безусловно, не является «плохой практикой».

Есть три основных способа внедрить пользовательский интерфейс PyQt4 в ваш код:

  • Пишите все от руки сами
  • Используйте pyuic4 для автоматического создания модуля Python, который можно импортировать.
  • Используйте пакет uic для загрузки ui файлов непосредственно во время выполнения.

Из них первые два являются наиболее распространенными, и большинство документации, учебных пособий, советов и т. д., с которыми вы столкнетесь, будут использовать эти методы.

Хороший источник руководств по PyQt4 можно найти в этом разделе Вики PyQt4. Тем не менее, я, вероятно, должен отметить, что, хотя они все еще актуальны, многие из них довольно старые и поэтому все еще используют сигналы и слоты старого стиля.

Однако разницу между старым и новым стилями понять несложно, поэтому, возможно, достаточно простого примера.

Вот старый способ подключения сигнала нажатия кнопки к методу-обработчику (также известному как слот):

self.connect(self.button, QtCore.SIGNAL('clicked()'), self.handleButtonClick)

и вот способ нового стиля:

self.button.clicked(self.handleButtonClick)

Как видите, новый стиль намного проще и более питонический. С другой стороны, старый стиль очень похож на то, как соединяются сигналы с помощью C++ (и по этой причине все еще может быть полезен в определенных обстоятельствах).

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

person ekhumoro    schedule 16.01.2012
comment
Спасибо за ответ и ссылки. Новый стиль выглядит действительно проще. И я, вероятно, должен еще раз спросить моего друга, что он имеет в виду, говоря: объединение двух подходов, LoadUI и подключение по имени, имеет большой смысл. - person Ekaterina Mishina; 17.01.2012