首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在不冻结PyQt GUI的情况下跟踪Python中的线程进度?

在不冻结 PyQt GUI 的情况下跟踪 Python 中的线程进度,可以使用 QThread 和信号(Signals)来实现。以下是一个简单的示例:

首先,导入所需的库:

代码语言:python
复制
from PyQt5.QtCore import QObject, pyqtSignal, QThread
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QVBoxLayout, QWidget

接下来,创建一个工作线程类,该类继承自 QObject,并定义一个信号用于发送进度信息:

代码语言:python
复制
class WorkerThread(QObject):
    progress = pyqtSignal(int)

    def run(self):
        for i in range(101):
            self.progress.emit(i)
            # 模拟耗时操作
            time.sleep(0.1)

然后,创建一个 PyQt 应用程序和主窗口:

代码语言:python
复制
app = QApplication([])
window = QMainWindow()

在主窗口中添加一个按钮和一个用于显示进度的小部件:

代码语言:python
复制
start_button = QPushButton("开始")
progress_widget = QWidget()
layout = QVBoxLayout()
layout.addWidget(start_button)
layout.addWidget(progress_widget)
window.setLayout(layout)

创建一个 QThread 实例,并将工作线程对象移动到该线程中:

代码语言:python
复制
thread = QThread()
worker = WorkerThread()
worker.moveToThread(thread)

接下来,将线程的信号与主窗口的槽(Slot)连接起来,以便在线程发送进度信息时更新 GUI:

代码语言:python
复制
worker.progress.connect(progress_widget.setValue)

最后,启动线程:

代码语言:python
复制
thread.start()

完整代码如下:

代码语言:python
复制
import sys
import time
from PyQt5.QtCore import QObject, pyqtSignal, QThread
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QVBoxLayout, QWidget

class WorkerThread(QObject):
    progress = pyqtSignal(int)

    def run(self):
        for i in range(101):
            self.progress.emit(i)
            time.sleep(0.1)

app = QApplication([])
window = QMainWindow()

start_button = QPushButton("开始")
progress_widget = QWidget()
layout = QVBoxLayout()
layout.addWidget(start_button)
layout.addWidget(progress_widget)
window.setLayout(layout)

thread = QThread()
worker = WorkerThread()
worker.moveToThread(thread)

worker.progress.connect(progress_widget.setValue)

thread.start()

window.show()
sys.exit(app.exec_())

这个示例将在不冻结 PyQt GUI 的情况下跟踪 Python 中的线程进度。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

用wxPython打造Python图形界面(上)

有许多图形用户界面(GUI)工具包可以与Python编程语言一起使用。其中三巨头是Tkinter、wxPython和PyQt。...这些工具包每一个都将与Windows、macOS和Linux一起工作,而PyQt具有在移动设备上工作附加功能。...wxpython入门 wxPython GUI工具包是一个围绕名为wxWidgetsc++库Python包装器。...wxPython与其他工具包(PyQt或Tkinter)主要区别在于,wxPython尽可能在本机平台上使用实际小部件。这使得wxPython应用程序看起来与它所运行操作系统是原生一体。...当你阻止一个事件循环时,GUI将变得无响应并对用户显示为冻结状态。 在GUI启动任何进程,如果耗时超过四分之一秒,都应该作为单独线程或进程启动。这将防止GUI冻结,并为用户提供更好用户体验。

4.8K40

讲解pyqt5 opengl demo

讲解 PyQt5 OpenGL DemoPyQt5 是一个基于 Python GUI 库,它提供了丰富功能来创建图形用户界面。...继续学习和探索,你可以发现更多有趣应用场景!PyQt5是一个Python绑定Qt库工具集,它可以帮助开发者使用Python语言创建图形用户界面(GUI)应用程序。...支持多线程编程:PyQt5提供了多线程编程支持,可以在应用程序中使用多个线程来同时执行不同任务,提高程序效率和性能。...你可以在Qt Designer拖放工具和组件来布局界面,然后使用PyQt5将设计好界面与后端Python代码进行连接。...总结起来,PyQt5是一个功能强大工具集,它提供了丰富工具和组件,可以帮助你使用Python语言创建各种类型GUI应用程序。

31010

PyQt5 解决界面无响应方案

前言在PyQt5GUI线程通常指的是Qt主事件循环线程,也称为主线程。主线程负责处理GUI事件、更新UI界面等任务。在PyQt5,主线程GUI线程是同一个线程,即运行应用程序线程。...版本PyQt5Python 3.x案例我们写一个简单进度条填充程序,每 2 秒填充 1%:import sysimport timefrom PyQt5.QtWidgets import QApplication...= MyWorker() worker.timeout.connect(self.upgradeProgress) worker.start()这是因为在Python,类似于...当当前作用域代码执行完成后局部变量会被销毁。如果异步线程任务还没有完成,而主线程事件循环又需要等待任务完成才能继续执行,那么就会导致GUI线程无响应。...这是因为主线程被阻塞在等待异步任务过程,无法处理事件。

10120

python GUI库图形界面开发之PyQt5拖放控件实例详解

本篇,我们学习PyQt5界面拖放(Drag 和Drop)控件。 拖放动作 在GUI,拖放指的是点击一个对象,并将其拖动到另一个对象上动作。比如百度云PC客户端支持拖放文件以快速移动文件: ?...拖放动作能够很直观很方便GUI程序完成一些很复杂或繁琐操作。 在PyQt实现拖放 在PyQt5,我们也可以很轻松地使用拖放功能。 使用Qt设计师或者使用API都可以实现。...pyuic5 -o conplex_window_drag.py conplex_window.ui 然后,新建一个Python文嘉drag.py,在文件引入刚刚转换好Python文件: # coding...:utf-8 # 州先生 zmister.com Python GUI教程 from PyQt5 import QtCore,QtWidgets,QtGui from GUI import conplex_window_drag...在上面的程序,我们能够将文本拖放到按钮上。 好了python GUI库图形界面开发PyQt5拖放控件实例就是这些,更多关于python PyQt5 GUI库图形界面开发请查看下面的相关链接

4.1K23

PyQt5(designer)入门教程

本文讨论多Python共存,毕竟Python2.7在2020年就要退役了,而且我本人也没这需求。...在有Qt Designer情况下,是完全不推荐费时费力去手写GUI代码。Qt Designer可以所见即所得,并且可以方便修改并做出各种调整。...我程序中使用了threading模块,GUI作为主线程去启动负责逻辑处理线程。其中,我设计GUI里头有一个日志框,用来代替终端显示各种日志输出。...既然子线程是负责逻辑处理,那么想当然就会直接在子线程操作GUI显示。 都说了想当然,那当然不行咯,在子线程GUI操作时候,终端会出现下面这个错误,但是程序又不会马上闪退。...本站仅提供信息存储空间服务,拥有所有权,承担相关法律责任。发现本站有涉嫌侵权/违法违规内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

2.2K10

PyQt5入门教程

本文讨论多Python共存,毕竟Python2.7在2020年就要退役了,而且我本人也没这需求。...在有Qt Designer情况下,是完全不推荐费时费力去手写GUI代码。Qt Designer可以所见即所得,并且可以方便修改并做出各种调整。...如果不行,那么建议继续往下阅读,应当回头复习。 2)传参 现在我们有了GUI代码以及上一节中使用“main.py”,我们可以开始编写这个汇率转换器逻辑部分。...既然子线程是负责逻辑处理,那么想当然就会直接在子线程操作GUI显示。 都说了想当然,那当然不行咯,在子线程GUI操作时候,终端会出现下面这个错误,但是程序又不会马上闪退。...GUI所在线程通信,就是通过在子线程释放信号,传递到主线程槽来完成。

3.2K30

分享 | 如何为Pycharm打开视界

既然Qt这么强大,那么在Pycham编写Python代码时候能不能用Qt设计GUI窗口界面,将程序更好地通过窗口形式呈现出来呢? 答案是“能”。 ? 正因为用户需求,PyQt应运而生。...PyQt是一个创建GUI应用程序工具包。它是Python编程语言和Qt库成功融合。 PyQt实现了一个Python模块集。它有超过300类,将近6000个函数和方法。...它是一个多平台工具包,可以运行在所有主要操作系统上,包括UNIX,Windows和Mac。 ? 那么如何在Pycharm上安装PyQt呢? 下面本篇推文做了详细地介绍。...安装路径 (designer.exe可能直接在pyqt5_tools路径下,也可能在pyqt5_tools\Qt\bin) Arguments:填 directory: XXX\anaconda...打开下载文件夹复制python.dll文件 ? 将文件复制粘贴或替换到Anacondapython.exe文件所在文件夹 ?

1.1K20

Python应用03 使用PyQT制作视频播放器

最近研究了Python两个GUI包,Tkinter和PyQT。这两个GUI底层分别是Tcl/Tk和QT。相比之下,我觉得PyQT使用起来更加方便,功能也相对丰富。...(app.exec_()) 在PyQT程序,QApplication是最上层对象,指代整个GUI应用。...这样,上下层视图位置关系就通过布局确定了下来。除了网格式布局,PyQT还支持其他形式布局,横向堆砌、纵向堆砌等等,可以进一步了解。...多线程 GUI界面的主线程通常留给应用做主循环。其他很多工作要通过其他线程来完成。...代码: self.button.clicked.connect(self.handleButton) 此外,Phonon是一个很好用多媒体模块,使用方法也很简单,可以参考代码本身,这里不再赘述。

92220

Python QTimer实现多线程及QSS应用过程解析

线程类似于同时执行多个不同程序,多线程运行有如下优点: 使用线程可以把占据长时间程序任务放到后台去处理。...用户界面可以更加吸引人,比如用户点击了一个按钮去触发某些事件处理,可以弹出一个进度条来显示处理进度。 程序运行速度可能加快。...在一些等待任务实现上如用户输入、文件读写和网络收发数据等,线程就比较有用了。在这种情况下我们可以释放一些珍贵资源内存占用等等。 每个独立线程有一个程序运行入口、顺序执行序列和程序出口。...所以,在 Python3 不能再使用”thread” 模块。为了兼容性,Python3 将 thread 重命名为 “_thread”。...Python中使用线程有两种方式:函数或者用类来包装线程对象。 函数式:调用 _thread 模块start_new_thread()函数来产生新线程

1.1K30

Python使用PyQT制作视频播放器

最近研究了Python两个GUI包,Tkinter和PyQT。这两个GUI底层分别是Tcl/Tk和QT。相比之下,我觉得PyQT使用起来更加方便,功能也相对丰富。...(app.exec_()) 在PyQT程序,QApplication是最上层对象,指代整个GUI应用。...这样,上下层视图位置关系就通过布局确定了下来。除了网格式布局,PyQT还支持其他形式布局,横向堆砌、纵向堆砌等等,可以进一步了解。...多线程 GUI界面的主线程通常留给应用做主循环。其他很多工作要通过其他线程来完成。...代码: self.button.clicked.connect(self.handleButton) 此外,Phonon是一个很好用多媒体模块,使用方法也很简单,可以参考代码本身,这里不再赘述。

2.5K20

Python应用03 使用PyQT制作视频播放器

最近研究了Python两个GUI包,Tkinter和PyQT。这两个GUI底层分别是Tcl/Tk和QT。相比之下,我觉得PyQT使用起来更加方便,功能也相对丰富。...(app.exec_()) 在PyQT程序,QApplication是最上层对象,指代整个GUI应用。...这样,上下层视图位置关系就通过布局确定了下来。除了网格式布局,PyQT还支持其他形式布局,横向堆砌、纵向堆砌等等,可以进一步了解。...多线程 GUI界面的主线程通常留给应用做主循环。其他很多工作要通过其他线程来完成。...代码: self.button.clicked.connect(self.handleButton) 此外,Phonon是一个很好用多媒体模块,使用方法也很简单,可以参考代码本身,这里不再赘述。

3.4K90

Python应用03 使用PyQT制作视频播放器

最近研究了Python两个GUI包,Tkinter和PyQT。这两个GUI底层分别是Tcl/Tk和QT。相比之下,我觉得PyQT使用起来更加方便,功能也相对丰富。...(app.exec_()) 在PyQT程序,QApplication是最上层对象,指代整个GUI应用。...这样,上下层视图位置关系就通过布局确定了下来。除了网格式布局,PyQT还支持其他形式布局,横向堆砌、纵向堆砌等等,可以进一步了解。...多线程 GUI界面的主线程通常留给应用做主循环。其他很多工作要通过其他线程来完成。...代码: self.button.clicked.connect(self.handleButton) 此外,Phonon是一个很好用多媒体模块,使用方法也很简单,可以参考代码本身,这里不再赘述。

1.3K30

PyQt应用程序线程:使用Qt还是Python线程?

线程模块能够更加高效得完成任务,但是在PyQt 应用程序实现多线程可以使用 Qt 线程模块(QThread)或者 Python threading 模块。...1、问题背景在 PyQt 应用程序,编写了一个定期通过 web 连接检索数据 GUI 应用程序。由于检索过程需要一段时间,因此导致在检索过程 UI 无响应(无法将其拆分为更小部分)。...在 PyQt 应用程序中使用线程时,需要考虑以下几点:如果需要从线程内更新 GUI,则应使用 Qt-4 队列连接信号,以便轻松地跨线程发送数据,并且如果使用 QThread,则会自动调用它们;不确定如果使用...只有一个主线程可以进行任何 GUI 更新。Qt 线程Python 线程主要区别在于,Qt 线程更好地集成到 Qt 库其余部分。...Qt 线程在没有 Global Interpreter Lock 情况下运行,因此能够并发运行。Python 线程不需要 Global Interpreter Lock,因此能够并发运行。

16711

PyQt 简介

Qt是一个性能卓越跨平台C++图形用户界面(GUI)应用程序开发框架。...Qt 不仅仅含有各式各样GUI组件,它还包含以下功能: 网络sockets, 多线程,Unicode,正则表达式,SQL数据库,OpenGL, XML, 浏览器,多媒体框架……Qt 自推出至今,深受业界赞誉...PyQt 是 Qt 与 Python 成功融合,或者也可以认为 PyQt 是 Qt 库 Python版本。PyQt 结合了二者优点,可以用于快速创建应用程序。...PyQt4 和 Qt v4 不再受到支持,也有新版本发布。对于新应用程序开发,强烈推荐使用PyQt5 和 Qt v5 。...如果python已安装有pip模块,可以在命令提示符内 输入: pip install pyqt5 pip会根据用户操作系统以及python版本,自动在线下载并安装合适PyQt版本。 ?

1.5K20

十个顶级Python 图形界面(GUI)框架供你选择

幸运是,有很多Python框架专门帮助开发人员构建令人惊叹但高度直观用户界面,以适应程序应用。 本文目的是帮助那些正在努力寻找用Python合适框架框来架构建交互式GUI的人。...这些视觉元素输入可以来自通常媒介,键盘、鼠标和触摸屏。 最佳GUI Python框架 专注于完善用户界面是一件好事,但同样重要是提供最好用户体验,在投入过多资源情况下交付它也同样重要。...Python有大量用于开发GUI框架,我们在下面的列表收集了一些最流行Python GUI框架。...当然,也存在通过代码创建这些元素选项,允许您轻松创建小规模和大规模应用程序。Python模块化以扩展形式延伸到PyQt5,为您提供了比GUI构建多得多特性。...PyForms提供了几个流行以图形为中心实例,PyQt、OpenGL等,以帮助开发人员为他们应用程序创建用户界面。

6.5K10

【说站】python GUI编程有哪些模板

python GUI编程有哪些模板 作为一种胶水语言,python几乎没有什么是不能做,但是个人总觉得pythonGUI开发方面可以算是一个短板,为什么?...由于性能…python性能问题,常常出现在其他编程语言中。但是无论python何在GUI编程,都有很多优秀模块。 1、tkinter是python自带GUI模块。...wxpython优点是运行速度快,但写作复杂,界面美化效果差… 4、PYQT5是跨平台C++库。 无论是C,Java还是Python,都可以通过它来开发GUI界面。...PyQt5是Qtv5全面Python绑定。它实现了35个以上扩展模块,使Python能够在所有支持平台(包括iOS和Android)上用作C++替代应用开发语言。...与wxpython和pyqt相比,tkinter在编程小工具方面效率更高。 tkinter网上有很多快速入门教程。 以上就是python GUI编程模板介绍,希望对大家有所帮助。

71610

PyQT模块、类、控件介绍

PyQT模块 QtCore模块 涵盖了包核心GUI功能,此模块被用于处理程序涉及时间、文件、目录、数据类型、文本流、链接、QMimeData、线程或进程等对象。...该模块使得Qt GUI库和OpenGL库无缝集成。 QtXmlPatterns模块 所包含类实现了对XML和自定义数据模型Xquery与XPath支持。...QtDesigner模块 所包含类允许使用PyQt扩展Qt Designer。 Qt模块 将上面模块类综合到一个单一模块。...uic模块 所包含类用来处理.ui文件,该文件由Qt Designer创建,用于描述整个或者部分用户界面。它可以将.ui文件编译为.py文件,以便其他Python程序调用。...PyQT主要类 QObject类 在类层次结构是顶部类(Top Class),它是所有PyQt对象基类。 QPaintDevice类 所有可绘制对象基类。

38631

python GUI库图形界面开发之PyQt5 UI主线程与耗时线程分离详细方法实例

在做界面开发时,无论是移动端Android,还是我们这里讲PyQt5,经常会有一个界面开发准则,那就是UI主线程与耗时子线程一定要分开,主线程负责刷新界面,耗时操作,网络交互、磁盘IO等,都应该放在子线程里执行...我们将UI主线程time.sleep(20)移动到子线程中就可以了。...PyQt5提供了线程类QThread,我们继承它并重写它run方法,新建一个新文件threads.py # -*- coding: utf-8 -*- import time from PyQt5...th信号finishSignal和UI主线程槽函数button_finish进行连接 self.th.finishSignal.connect(self.button_finish) # 启动线程...main.py,界面就再也不会出现No Resonding提示了,可以在子线程执行过程可以随意操作界面上其它控件 更多相关知道请查看下面的相关链接

1.2K41
领券