Updating Python GUI-Element von Qthread

So weiß ich, dass es eine Menge Beiträge zum Aktualisieren von Elementen in einer GUI mit Qthread gibt. Ich habe mein Bestes getan, um diese zu durchgehen, habe aber noch eine Frage.

Ich versuche eine GUI zu erstellen, die eine Methode ausführt, wenn auf eine Schaltfläche geklickt wird. Diese Methode startet dann einen neuen Thread. Dann sendet dieser Thread ein Signal an die GUI, um den Wert des GUI-Elements zu ändern:

from PySide import QtCore, QtGui
import time

class WorkerThread(QtCore.QThread):
    updateProgress = QtCore.Signal(int)
    def __init__(self, countto):
        QtCore.QThread.__init__(self)
        self.countto = countto

    def run(self):
        i = 0
        while i <= self.countto:
            print(self.countto)
            self.updateProgress.emit(i)
            time.sleep(1)
            i += 1


class Ui_Dialog(object):
    def setupUi(self, Dialog):
        Dialog.setObjectName("Dialog")
        Dialog.resize(400, 300)
        self.progressBar = QtGui.QProgressBar(Dialog)
        self.progressBar.setGeometry(QtCore.QRect(110, 120, 118, 23))
        self.progressBar.setProperty("value", 0)
        self.progressBar.setObjectName("progressBar")
        self.lineEdit = QtGui.QLineEdit(Dialog)
        self.lineEdit.setGeometry(QtCore.QRect(50, 60, 113, 20))
        self.lineEdit.setObjectName("lineEdit")
        self.pushButton = QtGui.QPushButton(Dialog)
        self.pushButton.setGeometry(QtCore.QRect(190, 60, 75, 23))
        self.pushButton.setObjectName("pushButton")

        self.wt = WorkerThread(int)
        self.wt.updateProgress.connect(self.setProgress)

        self.retranslateUi(Dialog)
        QtCore.QMetaObject.connectSlotsByName(Dialog)

    def retranslateUi(self, Dialog):
        Dialog.setWindowTitle(QtGui.QApplication.translate("Dialog", "Dialog", None, QtGui.QApplication.UnicodeUTF8))
        self.pushButton.setText(QtGui.QApplication.translate("Dialog", "PushButton", None, QtGui.QApplication.UnicodeUTF8))
        self.pushButton.connect(QtCore.SIGNAL('clicked()'), self.get_time)

    def setProgress(self, progress):
        self.progressBar.setValue(progress)

    def get_time(self):
        countto = self.lineEdit.text()
        countto = int(countto)
        print(countto)
        self.wt = WorkerThread(countto)
        self.wt.start()
        q = 0
        while q < 5:
            print(countto+2)
            time.sleep(2)
            q += 1


if __name__ == "__main__":
    import sys
    app = QtGui.QApplication(sys.argv)
    Dialog = QtGui.QDialog()
    ui = Ui_Dialog()
    ui.setupUi(Dialog)
    Dialog.show()
    sys.exit(app.exec_())

Diese GUI soll den Haupt-Thread ausführen und willkürlich zählen, um sicherzustellen, dass es funktioniert. Dann zählt der zweite Thread willkürlich mit, um sicherzustellen, dass er funktioniert, und versucht dann, ein Signal an die GUI zu senden, um das @ zu aktualisiereprogressbar Element. Ich weiß, dass beide Threads ausgeführt werden, aber ich glaube, ich habe ein Problem beim Empfang des Signals, weil dasprogressbar wird nicht aktualisiert. Ich habe ein paar Dinge ausprobiert, aber jetzt stecke ich fest. Ich denke, das Problem tritt auf, wenn ich versuche, einen Wert an den Thread zu übergeben und wenn ich versuche, eine Instanz des Threads in der Methode "setupUi" zu erstellen, um sie später neu zu definieren.

Kann mir jemand helfen und meinen Denkfehler erklären? Ich versuche, meinen Kopf mit Signalen und Slots mit Threading zu umwickeln, daher wäre eine Erklärung großartig.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage