ich bin absoluter Neuling in Python und bräuchte deswegen eure Unterstützung.
Ich will eine Benutzeroberfläche in Python programmieren, um eine Dauermessung zu überwachen. Dazu will ich eingegebene Werte von der GUI einlesen und diese in den Thread übergeben. Im Thread läuft die Endlosschleife zur Messung und bei einem abweichenden Wert soll dies auf der GUI kenntlich gemacht werden.
Mein Problem ist jetzt wie ich die Werte 'einst_1' und 'einst_2' aus der Ui_MainWindow in MyThread übergeben kann.
Vielen Dank schon mal im Voraus:)
Hier mal mein Beispiel-Code:
Code: Alles auswählen
from PyQt5 import QtCore, QtWidgets
import time
from PyQt5.QtCore import QThread, pyqtSignal
class MyThread(QThread):
# Create a counter thread
change_text = pyqtSignal(str)
def run(self):
x = 0
while x < 1000:
x += 1
time.sleep(0.1)
if x == 50:
self.change_text.emit('FEHLER')
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(698, 363)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.btn_start = QtWidgets.QPushButton(self.centralwidget)
self.btn_start.setGeometry(QtCore.QRect(290, 220, 151, 61))
self.btn_start.setObjectName("btn_start")
self.comboBox = QtWidgets.QComboBox(self.centralwidget)
self.comboBox.setGeometry(QtCore.QRect(180, 60, 91, 31))
self.comboBox.setObjectName("comboBox")
self.comboBox.addItem("")
self.comboBox.addItem("")
self.comboBox.addItem("")
self.comboBox_2 = QtWidgets.QComboBox(self.centralwidget)
self.comboBox_2.setGeometry(QtCore.QRect(180, 120, 91, 31))
self.comboBox_2.setObjectName("comboBox_2")
self.comboBox_2.addItem("")
self.comboBox_2.addItem("")
self.comboBox_2.addItem("")
self.btn_einstellungen = QtWidgets.QPushButton(self.centralwidget)
self.btn_einstellungen.setGeometry(QtCore.QRect(310, 80, 171, 41))
self.btn_einstellungen.setObjectName("btn_einstellungen")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 698, 26))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.btn_einstellungen.clicked.connect(self.Einstellungen_uebernehmen)
self.btn_start.clicked.connect(self.Messung_starten)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.btn_start.setText(_translate("MainWindow", "Start"))
self.comboBox.setItemText(0, _translate("MainWindow", "5"))
self.comboBox.setItemText(1, _translate("MainWindow", "10"))
self.comboBox.setItemText(2, _translate("MainWindow", "15"))
self.comboBox_2.setItemText(0, _translate("MainWindow", "20"))
self.comboBox_2.setItemText(1, _translate("MainWindow", "30"))
self.comboBox_2.setItemText(2, _translate("MainWindow", "40"))
self.btn_einstellungen.setText(_translate("MainWindow", "Einstellungen übernehmen"))
def Einstellungen_uebernehmen(self):
'''Diese Funktion liest die Einstellungswerte vom GUI ein.'''
self.einst_1 = int(self.comboBox.currentText())
self.einst_2 = int(self.comboBox_2.currentText())
print('Einstellung 1: ', self.einst_1)
print('Einstellung 2: ', self.einst_2)
self.btn_einstellungen.setStyleSheet("background-color: rgb(0,220,0)")
def Messung_starten(self):
self.thread = MyThread()
self.thread.change_text.connect(self.setText)
self.thread.start()
def setText(self, text):
self.btn_start.setText(text)
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_())