PyQt5關閉視窗多執行緒的退出

2021-10-09 12:31:24 字數 809 閱讀 6218

問題描述:

在主視窗初始化過程中開啟新執行緒socket,socket執行緒中又開啟子執行緒與客戶端socket通訊,關閉主視窗時總是不能退出所有執行緒(客戶端是單獨開啟乙個子程序)。

解決方案:

搜了一下網上的,主要是設定守護程序、重寫關閉函式等:

self.your_thread = threading.thread(target=self.fun, args=(arg1, arg2))

# 設定執行緒為守護執行緒,防止退出主線程時,子執行緒仍在執行

self.your_thread.setdaemon(true)

# 新執行緒啟動,注意要先設定守護執行緒再啟動

self.your_thread.start()

def closeevent(self, event):

"""對mainwindow的函式closeevent進行重構

退出軟體時結束所有程序

""" reply = qtwidgets.qmessagebox.question(self,'提示',"確認退出嗎?",qtwidgets.qmessagebox.yes | qtwidgets.qmessagebox.no,qtwidgets.qmessagebox.no)

if reply == qtwidgets.qmessagebox.yes:

event.accept()

os._exit(0)

else:

event.ignore()

具體原因還沒分析,後續可以深入了解一下。

pyqt5多執行緒優化 PyQt5多執行緒

您不應該向主檢視傳送乙個新的小部件 qlabel 因為它將是乙個新標籤,而不是原始標籤,您應該傳送str型別的文字class thread qthread changepixmap pyqtsignal qpixmap changelabel pyqtsignal str def run self ...

PyQt5多執行緒

多執行緒一般有兩種辦法 繼承qthread 繼承qobject並使用movetothread 官方推薦 self.test thread2.quit self.test thread2.wait 如果不確保執行緒完全退出,執行緒再次執行時程式會崩潰。效果圖 原始碼 import time from ...

pyqt5 多執行緒初步

多執行緒是實現併發的乙個重要手段。在gui程式設計中,經常需要將耗費時間較多的任務分離出來成為乙個執行緒,避免對主線程造成影響 造成介面無響應 在qt中,最簡單的多執行緒主要通過繼承qthread類實現,過載虛函式run class mythread qthread 設定訊號量用於輸出,解決輸出問題...