步驟: 在主線程中實例化並且啟動子線程,然后由子線程通過信號發送器向主線程發送信號
ThreadUpdateUI.py
""" 多線程更新UI數據(在兩個線程中傳遞函數) """ from PyQt5.QtCore import QThread, pyqtSignal, QDateTime from PyQt5.QtWidgets import QApplication, QDialog, QLineEdit import time import sys class BackendThread(QThread): update_date = pyqtSignal(str) #在子線程start以后, 自動調用 #主要功能是發送當前的時間 def run(self): while True: data = QDateTime.currentDateTime() currentTime = data.toString("yyyy-MM-dd hh:mm:ss") self.update_date.emit(str(currentTime)) time.sleep(1) class ThreadUpdate(QDialog): def __init__(self): super(ThreadUpdate, self).__init__() self.setWindowTitle("多線程更新UI數據") self.resize(400, 100) self.input = QLineEdit(self) self.input.resize(400, 100) self.initUI() def initUI(self): #構造子線程 self.backbend = BackendThread() #在主線程定義, 子線程的信號槽函數 self.backbend.update_date.connect(self.handleDisplay) #start以后會調用run函數 self.backbend.start() def handleDisplay(self, data): self.input.setText(data) if __name__ == "__main__": app = QApplication(sys.argv) main = ThreadUpdate() main.show() sys.exit(app.exec_())