1. 程式人生 > >pyqt點選右上角關閉介面但子執行緒仍在執行

pyqt點選右上角關閉介面但子執行緒仍在執行

現象:

  • 通過右上角的叉關閉圖形介面後,程式執行的子執行緒卻不會被自動關閉,依然留存在系統中

原因:

  • 子執行緒沒有正確關閉

解決方法:

1.將子執行緒設定成守護執行緒

self.your_thread = threading.Thread(target=self.tcp_client_concurrency)
# 設定執行緒為守護執行緒,防止退出主執行緒時,子執行緒仍在執行
self.your_thread.setDaemon(True)
# 新執行緒啟動
self.your_thread.start()

2.重構 def closeEvent(self, event): 函式

    def closeEvent(self, event):
        """
        對MainWindow的函式closeEvent進行重構
        退出軟體時結束所有程序
        :param event:
        :return:
        """
        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()

參考資料: