【发布时间】:2020-09-08 16:32:16
【问题描述】:
当用户单击“X”时,我的 GUI 中有一个线程正在运行,我想正确关闭它。 “尝试使用 closeEvent!”,我想,但事实证明这对我来说并不容易。 我尝试了几件事,我在 stackoverflow 上找到了这些,但对我没有用。
from PyQt5 import QtCore, QtGui, QtWidgets
import threading
class Ui_MainWindow(object): # I also tried QtWidgets.QMainWindow, makes no difference
def __init__(self):
self.update_thread = threading. Thread(target=self.update)
self.update_thread._stop_event = threading.Event()
self.update_thread.start()
def setupUi(self, MainWindow):
# a lot of stuff going on here
MainWindow.setObjectName("MainWindow")
MainWindow.resize(400, 400)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
def update(self):
# do something, not really relevant
pass
def closeEvent(self, event):
print("test")
self.update_thread._stop_event.set()
self.update_thread.join()
event.accept()
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
我省略了整个 ui 部分,因为它只是在做...... ui 的东西。 我在这里做错了什么?
感谢每一个建议。
【问题讨论】:
标签: python multithreading qt user-interface