2016-04-13 10 views
2

Ich habe diese einfache Benutzeroberfläche mit qtDesigner erstellt und ich möchte alle 10 Sekunden mein Label mit dem Wert einer Funktion aktualisieren, aber ich habe keine Ahnung, wie das geht. Ich habe verschiedene Dinge ausprobiert, aber nichts hat funktioniert.pyQt: Wie aktualisiere ich ein Etikett?

def example(): 
    ... 
    return text 

UI:

class Ui_Form(object): 
    def setupUi(self, Form): 
     Form.setObjectName("Form") 
     Form.resize(400, 300) 
     self.label = QtWidgets.QLabel(Form) 
     self.label.setGeometry(QtCore.QRect(165, 125, 61, 16)) 
     self.label.setObjectName("label") 

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

    def retranslateUi(self, Form): 
     _translate = QtCore.QCoreApplication.translate 
     Form.setWindowTitle(_translate("Form", "Form")) 
     self.label.setText(_translate("Form", plsupdatethis) 

if __name__ == "__main__": 
    import sys 
    app = QtWidgets.QApplication(sys.argv) 
    Form = QtWidgets.QWidget() 
    ui = Ui_Form() 
    ui.setupUi(Form) 
    Form.show() 
    sys.exit(app.exec_()) 

Antwort

5

Idealerweise würden Sie eine Unterklasse von QWidget erstellen (anstatt einfach die Art und Weise instanziieren Sie mit Form tun). Aber hier ist ein Weg, wie Sie es mit minimalen Änderungen tun können.

Sie haben eine Funktion, die das Etikett aktualisieren kann. Verwenden Sie dann eine QTimer, um es in regelmäßigen Abständen (in diesem Fall alle 10 Sekunden) auszulösen.

import datetime 

if __name__ == "__main__": 
    import sys 
    app = QtWidgets.QApplication(sys.argv) 
    Form = QtWidgets.QWidget() 
    ui = Ui_Form() 
    ui.setupUi(Form) 
    Form.show() 

    def update_label(): 
     current_time = str(datetime.datetime.now().time()) 
     ui.label.setText(current_time) 

    timer = QtCore.QTimer() 
    timer.timeout.connect(update_label) 
    timer.start(10000) # every 10,000 milliseconds 

    sys.exit(app.exec_()) 
+0

das ist perfekt, vielen Dank! –