2016-04-13 7 views
2

Я создал этот простой интерфейс с qtDesigner, и я хочу обновлять свой ярлык каждые 10 секунд значением функции, но я понятия не имею, как это сделать. Я пробовал разные вещи, но ничего не работало.pyQt: Как обновить ярлык?

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

ответ

5

В идеале, вы должны создать подкласс QWidget (вместо того, чтобы просто инстанцировании это так, как вы делаете с Form). Но здесь вы можете сделать это с минимальными изменениями.

У вас есть функция, способная обновлять этикетку. Затем используйте QTimer для запуска через равные промежутки времени (в этом случае каждые 10 секунд).

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

Это идеальное решение, большое спасибо! –