GUI mit Qt5 - Werteübergabe in Thread
Verfasst: Sonntag 22. Dezember 2019, 18:22
Hallo zusammen,
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 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 Main-Klasse in den Thread übergeben kann.
Vielen Dank schon mal im Voraus:)
Hier mal mein Beispiel-Code:
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_())
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 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 Main-Klasse in den Thread übergeben kann.
Vielen Dank schon mal im Voraus:)
Hier mal mein Beispiel-Code:
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_())