在使用 Qt For Python 編寫GUI時遇到個問題,GUI界面有一個主進程,在不使用QProcess, QThread情況下,都是默認單線程與單進程的。例如新建一個按鈕,該按鈕調用一個槽函數 是 time.sleep( 10000) ,那在這個槽函數運行完之前,整個UI界面都是假死狀態(無響應),要等整個槽函數運行完後才能GUI恢復控制。
所以在有一個槽函數需要消耗很多時間的情況下,必須要開一個新進程或者新線程來負責這個耗時的函數,才能不影響主界面。
我這裏使用的多進程的方法,PySide2.QtCore.QProcess,
Qt For Python 官方文檔地址:https://doc.qt.io/qtforpython/PySide2/QtCore/QProcess.html?highlight=process#PySide2.QtCore.PySide2.QtCore.QProcess.arguments
# 這是某個槽函數,會打開這個exe程序,並傳入-d xxxx -a xxxx 的參數 def new_process(self): my_process = PySide2.QtCore.QProcess(self) my_process.setProgram("abc.exe") my_process.setArguments(['-d', filepath_1, '-a', filepath_2]) my_process.start()
我照着官方文檔讀了很久,雖然關鍵的函數和流程都列出來了,但例子都是Qt C++的例子,實際在Python 中使用還是摸索了很久才成功,作爲踩坑記錄一下,希望對大家有幫助。