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_())
GUI mit Qt5 - Werteübergabe in Thread
Sorry, hier nochmal der Code ordentlich dargestellt:
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_())