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

Я пишу приложение с графическим интерфейсом PyQt4 (Python3). Один мой друг отметил, что использование pyuic4 - плохая практика, и направил меня к модулю uic и функциям "Соединение слотов по имени". У него не было времени, чтобы объяснить больше, и ссылки у меня довольно короткие, я не мог понять идею из них ( модуль uic, http://diotavelli.net/PyQtWiki/LoadingUIFilesAtRuntime, соединяющий слоты по имени).

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

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

1 ответ

Решение

Во-первых, используя pyuic4 это конечно не "плохая практика".

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

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

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

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

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

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

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

и вот новый стиль:

self.button.clicked(self.handleButtonClick)

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

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

Другие вопросы по тегам