GF
10 января 2021 г. 22:52
Сигналы и слоты в PyQt5
Пример тестового интерфейса с описанием подключения слота и сигнала, но оно не срабатывает по непонятным причинам.
- import sys, binascii, glob, asyncio
- from PyQt5.QtCore import QObject, pyqtSlot, QDateTime, Qt, QTimer
- from PyQt5 import QtCore, QtGui, QtWidgets
- from PyQt5.QtWidgets import (QApplication, QCheckBox, QComboBox, QDateTimeEdit,
- QDial, QDialog, QGridLayout, QGroupBox, QHBoxLayout, QLabel, QLineEdit,
- QProgressBar, QPushButton, QRadioButton, QScrollBar, QSizePolicy,
- QSlider, QSpinBox, QStyleFactory, QTableWidget, QTabWidget, QTextEdit,
- QVBoxLayout, QWidget, QMainWindow, QMessageBox)
- class Ui_MainWindow(object):
- def setupUi(self, MainWindow):
- MainWindow.setObjectName("MainWindow"); MainWindow.resize(400, 300);
- self.centralWidget = QtWidgets.QWidget(MainWindow); self.centralWidget.setObjectName("centralWidget");
- self.gridLayout = QtWidgets.QGridLayout(self.centralWidget); self.gridLayout.setContentsMargins(11,11,11,11);
- self.gridLayout.setSpacing(6); self.gridLayout.setObjectName("gridLayout");
- self.verticalLayout = QtWidgets.QVBoxLayout(); self.verticalLayout.setSpacing(6);
- self.verticalLayout.setObjectName("verticalLayout");
- self.pushButtonFirst = QtWidgets.QPushButton(self.centralWidget);
- self.pushButtonFirst.setObjectName("pushButtonFirst");self.verticalLayout.addWidget(self.pushButtonFirst);
- self.pushButtonSecond = QtWidgets.QPushButton(self.centralWidget);
- self.pushButtonSecond.setObjectName("pushButtonSecond");self.verticalLayout.addWidget(self.pushButtonSecond);
- self.checkBox = QtWidgets.QCheckBox(self.centralWidget);
- self.checkBox.setObjectName("checkBox"); self.verticalLayout.addWidget(self.checkBox);
- self.lineEdit = QtWidgets.QLineEdit(self.centralWidget);
- self.lineEdit.setObjectName("lineEdit"); self.verticalLayout.addWidget(self.lineEdit);
- self.gridLayout.addLayout(self.verticalLayout,0,0,1,1);MainWindow.setCentralWidget(self.centralWidget);
- self.menuBar = QtWidgets.QMenuBar(MainWindow);self.menuBar.setGeometry(QtCore.QRect(0,0,400,21));
- self.menuBar.setObjectName("menuBar");MainWindow.setMenuBar(self.menuBar);
- self.mainToolBar = QtWidgets.QToolBar(MainWindow);self.mainToolBar.setObjectName("mainToolBar");
- MainWindow.addToolBar(QtCore.Qt.TopToolBarArea, self.mainToolBar);
- self.statusBar = QtWidgets.QStatusBar(MainWindow);self.statusBar.setObjectName("statusBar");
- MainWindow.setStatusBar(self.statusBar);self.retranslateUi(MainWindow);
- QtCore.QMetaObject.connectSlotsByName(MainWindow);
- def retranslateUi(self, MainWindow):
- _translate = QtCore.QCoreApplication.translate
- MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
- self.pushButtonFirst.setText(_translate("MainWindow", "PushButton"))
- self.pushButtonSecond.setText(_translate("MainWindow", "PushButton"))
- self.checkBox.setText(_translate("MainWindow", "CheckBox"))
- class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
- def __init__(self, parent=None):
- super(MainWindow, self).__init__(parent); self.setupUi(self);
- self.pushButtonFirst.released.connect(self.pushButtonClicked)
- #self.pushButtonFirst.clicked.connect(self.pushButtonClicked)
- @QtCore.pyqtSlot()
- def pushButtonClicked(self):
- try:
- sender = self.sender();
- self.statusBar().showMessage(sender.text() + ' was pressed')
- msg = QMessageBox();
- msg.setIcon(QMessageBox.Information);
- msg.setText("This is a message box");
- msg.setInformativeText("This is additional information");
- msg.setWindowTitle("MessageBox demo");
- msg.setDetailedText("The details are as follows:");
- msg.setStandardButtons(QMessageBox.Ok | QMessageBox.Cancel);
- msg.exec_();
- except Exception as e:
- return str(e);
- if __name__ == "__main__":
- app=QtWidgets.QApplication(sys.argv); w=MainWindow(); w.show(); sys.exit(app.exec_())
Вам это нравится? Поделитесь в социальных сетях!
Комментарии
Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
Пожалуйста, авторизуйтесь или зарегистрируйтесь
- Последние комментарии
- AK1 апреля 2025 г. 11:41Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
- VP9 марта 2025 г. 16:14Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…
- ИМ22 ноября 2024 г. 21:51Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
- Сейчас обсуждают на форуме
- f15 февраля 2025 г. 13:46Подскажите, пожалуйста! Как данный класс можно дополнить, чтобы созданные объекты можно было перемещать мышкой по сцене?
- Не запускается компьютер (точнее работает блок , но сам монитор вообще жесть)В общем я ничего с интернета не скачивала в последнее время. На компе никаких левых пр…
- Вопрос решен. Узнать QModelIndex элемента на который мы перетаскиваем другой элемент, можно с помощью функции indexAt(event->position().toPoint()) представления QTreeViev вызываемой в переопр…
- Спасибо большое за помощь и простите за то что отнял время своей невнимательностью.
Попробуйте сделать всю работу с одном в одном классе. И лучше проверяйте нажатие кнопки.
Решение стало следующим: после конвертации файла Ui из QtDesigner мне никак не выгодно продолжать работать в этом же файле, т.к. я постоянно продолжаю дорабатывать интерфейс, а его поведение я описываю в другом файле, поэтому я делаю следующее описание
Затем я создаю класс, в котором описываю подключение интерфейса и создание слотов для элементов управления
В таком случае я безпрепятственно постоянно могу корректировать интерфейс и безпрепятственно ориентироваться в другом классе для управления поведением новыми элементами управления.