说明
在软件使用中,大多数需要使用多线程来实现,并且需要线程长久执行,所以就需要用到死循环,哪如何停止该死循环线程
呢?
监控文件是否修改
主界面代码
import sys import os from PyQt5.QtWidgets import (QWidget,QApplication, QTextEdit, QPushButton, QBoxLayout) from PyQt5.QtCore import (QThread, pyqtSignal) class Window(QWidget): def __init__(self, parent=None, *args, **kwargs): super().__init__(parent, *args, **kwargs) self.initUI() def initUI(self): self.setWindowTitle('停止多线程死循环') self.resize(550, 450) # 创建多行文本框 qtext_edit = QTextEdit() qtext_edit.resize(530, 430) qtext_edit.setObjectName("edit") # 创建三个按钮 pushButton = QPushButton() pushButton.setText("导入文件") pushButton.clicked.connect(self.open_file) # 导入文件 qpush_button_start = QPushButton() qpush_button_start.setText("开始监控") qpush_button_start.clicked.connect(self.start_monitor) # 连接开始监控槽函数 qpush_button_stop = QPushButton() qpush_button_stop.setText("停止监控") qpush_button_stop.clicked.connect(self.stop_monitor) # 连接停止监控槽函数 # 添加到垂直布局 到 父控件 v_layout = QBoxLayout(QBoxLayout.TopToBottom) self.setLayout(v_layout) # 添加水平布局控件 lrlayout = QBoxLayout(QBoxLayout.LeftToRight) lrlayout.addWidget(pushButton) lrlayout.addWidget(qpush_button_start) lrlayout.addWidget(qpush_button_stop) v_layout.addWidget(qtext_edit) v_layout.addLayout(lrlayout) def open_file(self): print("导入文件") # 开始监控 def start_monitor(self): print("点击开始") # 停止监控 def stop_monitor(self): print("点击停止") if __name__ == '__main__': app = QApplication(sys.argv) window = Window() window.show() sys.exit(app.exec_())
监控文件是否更新线程
监控文件需要开启一个线程,不然主界面就会出现假死
class Thread(QThread): # 自定义修改时间信号 file_time = pyqtSignal(float) def __init__(self, path: str ,parent=None): super().__init__(parent) # 文件路径 self.path = path # 死循环状态 self.status = True # 默认文件最后修改时间 self.endTime = 0.0 def __del__(self): self.wait() def run(self) -> None: while self.status: # 判断文件修改时间 if self.endTime != os.path.getmtime(self.path): self.endTime = os.path.getmtime(self.path) # 发送文件修改信号 self.file_time.emit(self.endTime) self.sleep(1)
导入文件 & 更新文本框内容
def open_file(self): print("导入文件") # 选择文件 self.file_Name_Type = QFileDialog.getOpenFileName(self, "选取文件") if self.file_Name_Type == "": print("\n取消选择") return self.qtext_edit.append(f"导入文件路径 {self.file_Name_Type[0]}") # 添加文本框内容 def set_text(self,text: str): self.qtext_edit.append(f"文件最后修改时间 {text}")
开始 & 停止监控事件
点击
开始监控
开启监控线程,点击停止监控
,修改死循环条件
# 开始监控 def start_monitor(self): self.thread = Thread(self.file_Name_Type[0]) # 接收文件修改时间信号 self.thread.file_time.connect(self.set_text) self.thread.start() # 停止监控 def stop_monitor(self): self.thread.status = False
效果
版权声明:《 PyQT5 停止死循环线程(监控文件是否修改) 》为明妃原创文章,转载请注明出处!
最后编辑:2020-7-8 09:07:02