Вызвать функцию при выборе конкретного значения в comboBox
Возможно ли сделать так, чтобы при выборе значения в comboBox сразу вызывалась функция?
import serial
import time
from PyQt5 import QtCore, QtGui, QtWidgets, QtSerialPort
class Ui_MainWindow(object): #само окно
def setupUi(self, MainWindow):
MainWindow.setObjectName("Датчики")
MainWindow.resize(654, 404)
MainWindow.setFixedSize(654, 404)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.graphicsView = QtWidgets.QGraphicsView(self.centralwidget)
self.graphicsView.setGeometry(QtCore.QRect(20, 220, 181, 131))
self.graphicsView.setObjectName("graphicsView")
self.graphicsView_2 = QtWidgets.QGraphicsView(self.centralwidget)
self.graphicsView_2.setGeometry(QtCore.QRect(240, 220, 181, 131))
self.graphicsView_2.setObjectName("graphicsView_2")
self.graphicsView_3 = QtWidgets.QGraphicsView(self.centralwidget)
self.graphicsView_3.setGeometry(QtCore.QRect(460, 220, 181, 131))
self.graphicsView_3.setObjectName("graphicsView_3")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(460, 60, 141, 51))
self.pushButton.setObjectName("pushButton")
self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_2.setGeometry(QtCore.QRect(260, 60, 141, 51))
self.pushButton_2.setObjectName("pushButton_2")
self.comboBox = QtWidgets.QComboBox(self.centralwidget)
self.comboBox.setGeometry(QtCore.QRect(50, 70, 121, 31))
self.comboBox.setObjectName("QtWidgets.QComboBox")
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(80, 160, 71, 31))
self.label.setObjectName("label")
self.label_2 = QtWidgets.QLabel(self.centralwidget)
self.label_2.setGeometry(QtCore.QRect(300, 160, 71, 31))
self.label_2.setObjectName("label_2")
self.label_3 = QtWidgets.QLabel(self.centralwidget)
self.label_3.setGeometry(QtCore.QRect(520, 160, 71, 31))
self.label_3.setObjectName("label_3")
self.lcdNumber = QtWidgets.QLCDNumber(self.centralwidget)
self.lcdNumber.setGeometry(QtCore.QRect(80, 180, 64, 23))
self.lcdNumber.setObjectName("lcdNumber")
self.lcdNumber_2 = QtWidgets.QLCDNumber(self.centralwidget)
self.lcdNumber_2.setGeometry(QtCore.QRect(290, 180, 64, 23))
self.lcdNumber_2.setObjectName("lcdNumber_2")
self.lcdNumber_3 = QtWidgets.QLCDNumber(self.centralwidget)
self.lcdNumber_3.setGeometry(QtCore.QRect(510, 180, 64, 23))
self.lcdNumber_3.setObjectName("lcdNumber_3")
MainWindow.setCentralWidget(self.centralwidget)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
self.add_functions()
def retranslateUi(self, MainWindow): #названия
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.pushButton.setText(_translate("MainWindow", "Закрыть"))
self.pushButton_2.setText(_translate("MainWindow", "Открыть"))
self.label.setText(_translate("MainWindow", "Temperature"))
self.label_2.setText(_translate("MainWindow", "pH Value"))
self.label_3.setText(_translate("MainWindow", "EC Value"))
def add_functions(self): #сюда функции
self.pushButton.clicked.connect(self.closing)
def combobox(self, number):
if ui.combobox.currentText()=="com1":
print('ok')
def closing(self, number):
sys.exit(app.exec_())
if __name__ == "__main__": #для выхода из программы
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
НИКОГДА НЕ ИЗМЕНЯЙТЕ код, сгенерированный Qt Designer, НИКОГДА.
Создайте другой класс, который наследуется от соответствующего виджета, и используйте созданный класс для его заполнения.
# ??? import serial
# ??? import time
from PyQt5 import QtCore, QtGui, QtWidgets, QtSerialPort
class Ui_MainWindow(object): #само окно
def setupUi(self, MainWindow):
MainWindow.setObjectName("Датчики")
MainWindow.resize(654, 404)
MainWindow.setFixedSize(654, 404)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.graphicsView = QtWidgets.QGraphicsView(self.centralwidget)
self.graphicsView.setGeometry(QtCore.QRect(20, 220, 181, 131))
self.graphicsView.setObjectName("graphicsView")
self.graphicsView_2 = QtWidgets.QGraphicsView(self.centralwidget)
self.graphicsView_2.setGeometry(QtCore.QRect(240, 220, 181, 131))
self.graphicsView_2.setObjectName("graphicsView_2")
self.graphicsView_3 = QtWidgets.QGraphicsView(self.centralwidget)
self.graphicsView_3.setGeometry(QtCore.QRect(460, 220, 181, 131))
self.graphicsView_3.setObjectName("graphicsView_3")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(460, 60, 141, 51))
self.pushButton.setObjectName("pushButton")
self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_2.setGeometry(QtCore.QRect(260, 60, 141, 51))
self.pushButton_2.setObjectName("pushButton_2")
self.comboBox = QtWidgets.QComboBox(self.centralwidget)
self.comboBox.setGeometry(QtCore.QRect(50, 60, 141, 51))
self.comboBox.setObjectName("QtWidgets.QComboBox")
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(80, 160, 71, 31))
self.label.setObjectName("label")
self.label_2 = QtWidgets.QLabel(self.centralwidget)
self.label_2.setGeometry(QtCore.QRect(300, 160, 71, 31))
self.label_2.setObjectName("label_2")
self.label_3 = QtWidgets.QLabel(self.centralwidget)
self.label_3.setGeometry(QtCore.QRect(520, 160, 71, 31))
self.label_3.setObjectName("label_3")
self.lcdNumber = QtWidgets.QLCDNumber(self.centralwidget)
self.lcdNumber.setGeometry(QtCore.QRect(80, 180, 64, 23))
self.lcdNumber.setObjectName("lcdNumber")
self.lcdNumber_2 = QtWidgets.QLCDNumber(self.centralwidget)
self.lcdNumber_2.setGeometry(QtCore.QRect(290, 180, 64, 23))
self.lcdNumber_2.setObjectName("lcdNumber_2")
self.lcdNumber_3 = QtWidgets.QLCDNumber(self.centralwidget)
self.lcdNumber_3.setGeometry(QtCore.QRect(510, 180, 64, 23))
self.lcdNumber_3.setObjectName("lcdNumber_3")
MainWindow.setCentralWidget(self.centralwidget)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
# self.add_functions()
def retranslateUi(self, MainWindow): #названия
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.pushButton.setText(_translate("MainWindow", "Закрыть"))
self.pushButton_2.setText(_translate("MainWindow", "Открыть"))
self.label.setText(_translate("MainWindow", "Temperature"))
self.label_2.setText(_translate("MainWindow", "pH Value"))
self.label_3.setText(_translate("MainWindow", "EC Value"))
class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self):
super().__init__()
self.setupUi(self)
self.comboBox.addItems(['Выберите COM-порт', 'com1', 'com2', 'com3',])
self.comboBox.currentTextChanged.connect(self.combobox_current_text)
# ??? def add_functions(self):
self.pushButton.clicked.connect(self.closing)
self.pushButton_2.clicked.connect(self.open_what)
# def combobox(self, number):
def combobox_current_text(self, text):
# if ui.combobox.currentText()=="com1":
if text == "com1":
print(f'Ok, вы выбрали {text}. Делайте что-нибудь.')
def closing(self, number):
# sys.exit(app.exec_())
self.close()
def open_what(self):
print(f'Откройте что-нибудь.')
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
w = MainWindow()
w.show()
sys.exit(app.exec_())
