PyQt5-子窗口关闭时,强制关闭子线程

目的: 为解决 在多窗口调用过程中,由于在子窗口中启用了线程处理任务,当关闭子窗口后,线程没有关闭的问题。

参考pyqt使用手册:
在这里插入图片描述
调用 terminate() 这个方法可强制关闭当前线程
具体代码如下:

import QThread
# 重新线程,在run()函数中以打印数字模拟耗时任务
class MyThread(QThread):
    def __init__(self):
        super().__init__()
    def run(self) -> None:
        for i in range(100):
            print(i)
            time.sleep(0.5)
# 此处是重写了子窗口的关闭事件
# self.myThread是已经启动(self.myThread.strat())的线程
def closeEvent(self, event):
	self.myThread.terminate()	# 结束此进程
	self.myThread.wait()		# 等待结束完成
	if self.myThrad.isFinished():	# 如果当前线程已经完成工作,则删除
		del self.myThread

这样就完成了在关闭子窗口时,同时结束子窗口中启用的子线程了。

PyQt5-子窗口关闭时,强制关闭子线程目的:为解决 在多窗口调用过程中,由于在子窗口中启用了线程处理任务,当关闭子窗口后,线程没有关闭的问题。参考pyqt使用手册:调用terminate()这个方法可强制关闭当前线程具体代码如下:import QThread# 重新线程,在run()函数中以打印数字模拟耗时任务class MyThread(QThread): def __init__(self): super().__init__() def run(s
问题描述: 在主窗口初始化过程中开启新线程socket,socket线程中又开启线程与客户端socket通信,关闭窗口总是不能退出所有线程(客户端是单独开启一个进程)。 解决方案: 搜了一下网上的,主要是设置守护进程、重写关闭函数等: 设置守护进程:setDaemon(True),这个方法有效果,语句要写在线程start之前: self.your_thread = threading.Thread(target=self.fun, args=(arg1, arg2)) # 设置线程为守护
Timer 一般会设置一个间隔间,然后才开一个线程执行需要执行的函数。 cancel() 函数只能取消还未开始执行的 Timer,也就是取消该 Timer。如果 Timer 已经开启线程执行函数了,用 cancel() 函数 是不能停止线程执行的,线程会一直执行,直到结束。 使用下面这个函数强制停止线程: import ctypes import datetime import inspect def stop_thread(thread): tid = thread.ident 提示:图形界面启动、点击运行如果执行的代码需要长间才能够执行完成,会导致图形界面卡死状态,这种情况下需要采用线程或者进程处理。 当前demo引用线程后台运行模块进行维护。 一、公共界面基类 class WDTBaseQWidget(QWidget): isBackRun= False backRunData= {} def toClose(self) -&g..
关闭窗口会导致所有的窗口一起关闭,因此需要在窗口关闭事件中处理主窗口关闭事件。可以在窗口类的关闭事件中使用`QApplication.instance().quit()`关闭应用程序。具体实现代码如下: ```python from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QPushButton class ChildWindow(QWidget): def __init__(self, parent=None): super().__init__(parent) self.setWindowTitle('Child Window') self.resize(200, 100) def closeEvent(self, event): # 关闭窗口 QApplication.instance().quit() class MainWindow(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle('Main Window') self.resize(400, 300) self.btn = QPushButton('Open Child Window', self) self.btn.clicked.connect(self.open_child_window) def open_child_window(self): child = ChildWindow(self) child.show() if __name__ == '__main__': app = QApplication([]) window = MainWindow() window.show() app.exec_() 在上面的例中,窗口类`ChildWindow`重写了`closeEvent`方法,在关闭窗口会触发该方法,从而关闭窗口。在主窗口类`MainWindow`中,点击按钮会打开一个窗口