2016-04-13 45 views
2

Bu basit kullanıcı arayüzünü qtDesigner ile oluşturdum ve etiketimi her 10 saniyede bir işlev değeriyle güncellemek istiyorum ancak bunu nasıl yapacağımı bilmiyorum. Farklı şeyler denedim ama hiçbir şey işe yaramadı.pyQt: Bir etiketi nasıl güncellerim?

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_()) 

cevap

5

İdeali, QWidget bir alt sınıfını yaratacak (yerine sadece o şekilde size Form yaptığını başlatmasını). Ama burada minimal değişikliklerle yapabileceğiniz bir yol.

Etiketi güncelleyebilen bir işleviniz var. Ardından, düzenli aralıklarla (bu durumda, her 10 saniyede bir) tetiklemek için QTimer kullanın.

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

Bu mükemmel, çok teşekkürler! –