说明

在软件使用中,大多数需要使用多线程来实现,并且需要线程长久执行,所以就需要用到死循环,哪如何停止该死循环线程呢?

监控文件是否修改

主界面代码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

效果

pythonpyqt5线程暂停重启时间_PyQT5 停止死循环线程(监控文件是否修改)相关推荐

  1. 潇洒郎: python threading 实现线程暂停、恢复、停止功能

    结果: 线程暂停.恢复.停止见注释 obj-T1-0obj-T2-0main 0obj-T1-1obj-T2-1obj-T2-2main 1obj-T1-2obj-T1-3obj-T2-3main 2 ...

  2. python pyqt5 线程 暂停 重启_PyQt5 线程阻塞?

    读取串口数据实时显示到textbrower,但会线程阻塞,求大神指教 # -*- coding: utf-8 -*- # Form implementation generated from read ...

  3. python pyqt5 线程 暂停 重启_如何在PyQT5中暂停/播放线程?

    我正在用PyQT5制作一个简单的GUI程序.在 但现在我遇到了一些关于线的问题.在 我只做了一个简单的测试程序,比如bottom: 该程序只是试图将数字附加到textbox,但它崩溃了.在 我不知道为 ...

  4. 面试官问:线程池是如何重复利用空闲的线程来执行任务的?

    欢迎关注方志朋的博客,回复"666"获面试宝典 在Java开发中,经常需要创建线程去执行一些任务,实现起来也非常方便,但如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任 ...

  5. 线程池是如何重复利用空闲的线程来执行任务的?

    来源:blog.csdn.net/anhenzhufeng/article/details/88870374 在Java开发中,经常需要创建线程去执行一些任务,实现起来也非常方便,但如果并发的线程数量 ...

  6. Qt实用技巧:使用OpenCV库的视频播放器(支持播放器操作,如暂停、恢复、停止、时间、进度条拽托等...

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 需求 使用OpenCV库的视频播放器(支持播放器操作,如暂停.恢复 ...

  7. java线程怎么重启_如何在Java中启动/停止/重启线程?

    10 个答案: 答案 0 :(得分:41) 一旦线程停止,您就无法重新启动它.但是,没有什么可以阻止您创建和启动新线程. 选项1:创建一个新线程,而不是尝试重新启动. 选项2:而不是让线程停止,让它等 ...

  8. 【Java 语言】Java 多线程 一 ( 线程基础 : 线程启动 | 线程停止 | 线程暂停 | 线程优先级 | 守护线程)

    一. 线程启动 线程启动 : -- 1. 继承 Thread 运行线程 : 重写 Thread 类的 run 方法, 然后执行该线程; -- 2. 实现 Runnable 接口, 并运行线程; -- ...

  9. python线程暂停_关于多线程:如何使“停止”按钮终止已经在Tkinter中运行的“开始”功能(Python)...

    我正在使用带有两个主要按钮的Tkinter制作GUI:"开始"和"停止". 您能否为以下代码提供建议,以使"停止"按钮终止由"开始 ...

最新文章

  1. VMware vSphere
  2. android flash闪退,Android全面停止Flash Adobe专注HTML5
  3. spring 事务说明
  4. python时间序列预测不连续怎么办_python – 不连续的时间序列在x轴上绘制日期
  5. java.io.StreamCorruptedException: invalid stream header: 00000000
  6. 【java笔记】Set接口 (HashSet集合,LinkedSet集合)
  7. 2013蓝桥杯C++A:颠倒的价牌(stringstream用法)
  8. 阿里云linux上安装,卸载mysql与重新安装配置Mysql
  9. 和计算机与设计相关的,计算机设计和类论文参考文献 计算机设计和参考文献有哪些...
  10. 51单片机教室人数进出统计检测LCD1602管显示装置红外传感器
  11. 中国第一政经博客 数学
  12. 为civil3D2018 添加snoop DB工具
  13. python世界杯问题
  14. 微信小程序开发工具报错对应的服务器证书无效
  15. 鸿海精密收购东芝闪存业务志在必得 或出价270亿美元
  16. 【ChatGPT调教】调教ChatGPT案例
  17. 可以进行论文降重吗?
  18. USACO-Section 1.2 Daul Palindromes[...]
  19. 如何截取视频片段 批量截取片段的方法
  20. caffe与卷积神经网络

热门文章

  1. 【Java】输出10-1000中间既能被3整除又能被7整除的数
  2. 什么是IDE(集成开发环境)?
  3. C#LeetCode刷题-分治算法
  4. React Router教程–如何使用代码示例渲染,重定向,切换,链接等
  5. 这是可用于下一个项目的React Native工具列表
  6. docker安装elasticsearch2.4.4
  7. Python网络爬虫开发实战,微博宫格验证码的识别
  8. python作用域——LEGB规则
  9. 透传模式(透明传输SeriaNet)详解
  10. mysql查询全年星期_数据库查询显示一年中所有的周一到周五的数据