python3多執行緒更新UI資料,pyqt5介面重新整理
阿新 • • 發佈:2018-12-31
本程式碼執行python3,pyqt5環境下。在編寫介面程式的時候經常會執行一些耗時的操作,所以我們要使用多執行緒來做耗時任務,主執行緒用來重繪介面。而子執行緒裡邊的實時處理結果需要反饋到介面。而總所周知,子執行緒裡邊不能執行介面更新操作。
下面是我寫微信機器人的時候總結出來的,大家可以看看這段程式碼。這段程式碼缺少相應的另外一些檔案,故不能直接執行。
# -*- coding: utf-8 -*- from PyQt5 import QtWidgets, QtCore from main import Ui_MainWindow from wechat import wechat import sys from PyQt5.QtCore import * import time # 繼承QThread class Runthread(QtCore.QThread): # python3,pyqt5與之前的版本有些不一樣 # 通過類成員物件定義訊號物件 _signal = pyqtSignal(str) def __init__(self, parent=None): super(Runthread, self).__init__() def __del__(self): self.wait() def run(self): # 處理你要做的業務邏輯,這裡是通過一個回撥來處理資料,這裡的邏輯處理寫自己的方法 # wechat.start_auto(self.callback) # self._signal.emit(msg); 可以在這裡寫訊號煥發 def callback(self, msg): # 訊號煥發,我是通過我封裝類的回撥來發起的 # self._signal.emit(msg); class mywindow(QtWidgets.QWidget, Ui_MainWindow): def __init__(self): super(mywindow, self).__init__() self.setupUi(self) self.Button_start.clicked.connect(self.start_login) def start_login(self): # 建立執行緒 self.thread = Runthread() # 連線訊號 self.thread._signal.connect(self.callbacklog) # 開始執行緒 self.thread.start() def callbacklog(self, msg): # 獎回撥資料輸出到文字框 self.textEdit_log.setText(self.textEdit_log.toPlainText()+ "\n"+ msg+ " "+ time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())); if __name__ == "__main__": app = QtWidgets.QApplication(sys.argv) myshow = mywindow() myshow.show() sys.exit(app.exec_())
大家可以下載我這個微信機器人玩玩,基於itchat包開發。