Поддержка нового стиля сигналов и слотов, 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++ (и по этой причине все еще может быть полезен в определенных обстоятельствах).
Если у вас возникают проблемы с подключением сигналов при написании графического интерфейса, вы всегда можете задать вопрос здесь - но гораздо легче получить хорошие ответы, если вы зададите конкретные вопросы, которые включают пример кода.