界面及功能完成后,點擊某個按鈕操作耗時的操作時(比如打包大文件),點擊按鈕后執行打包,於是在真正打包完成前,界面界面都是呈現卡住的,無法動彈,稍微操作一下時可能不會遇到停止等待。
於是這就有必要另起線程去操作打包而不影響界面上其它功能操作。使用線程時無須在線程中獲取界面上的屬性值,可以通過在執行線程前將所有線程中會遇到的屬性參數進行傳值過去,可以像下面這樣操作:
1 class MyMainWindow(QtWidgets.QMainWindow): 2 def __init__(self): 3 super().__init__() 4 5 def btn_bts_click(self): 6 fp = self.lineEdit_.text() 7 if fp != "": 8 self.thread.s_path = self.lineEdit_bts_path.text() # 傳值給線程中的參數 9 self.thread.fn = self.lineEdit_zzbb.text() # 傳值給線程中的參數 10 self.thread.start() 11 else: 12 QMessageBox.information(self, "Info", "Input First")
1 class RunThread(QThread): 2 btn_zip_signal = QtCore.pyqtSignal() 3 zip_doing_signal = QtCore.pyqtSignal() 4 zip_error_signal = QtCore.pyqtSignal() 5 zip_ok_signal = QtCore.pyqtSignal() 6 s_path = "" 7 fn = ""
然后在線程執行過程中如需要給界面上一些彈框提示的話,可以通過信號的方法,觸發信號后執行界面上的某些操作