Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在初始化大数据时显示进度条

如何在初始化大数据时显示进度条
EN

Stack Overflow用户
提问于 2021-04-22 12:53:21
回答 1查看 51关注 0票数 0

我使用的是PyQt5。在下面代码的MainWindow.__init__过程中,我想初始化一些需要很长时间(例如20秒)的大数据(参见MainWindow.initData)。在此期间,我想显示一个进度条。只有在app.exec_()开始执行之后,才能显示进度条,因此我不能从MainWindow.__init__中调用initData。因此,我试图通过发布一个事件(postEvent)来执行initData,该事件将导致initData在app.exec_执行时执行。我查看了stackoverflow中的一些示例,并获得了以下代码。虽然会发布事件并调用initData,但直到initData完成后才会显示进度条。

请建议如何修改代码,以便在执行initData时显示进度条。谢谢。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import sys
from PyQt5 import QtWidgets
from PyQt5.QtCore import QEvent

class MyEvent(QEvent):
    idType = QEvent.registerEventType()

    def __init__(self, data):
        QEvent.__init__(self, MyEvent.idType)
        self.data = data
        print("MyEvent.idType ", MyEvent.idType)

    def get_data(self):
        return self.data

class MainWindow(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        super().__init__(parent)

        self.setWindowTitle("My MainWindow")
        self.qProgressBar = QtWidgets.QProgressBar(self)
        self.qProgressBar.setGeometry(100, 100, 200, 30)

        self.label = QtWidgets.QLabel("Hello", self)
        self.label.setGeometry(50, 50, 200, 20)

        tempEvent = MyEvent("12345")
        QtWidgets.QApplication.postEvent(self, tempEvent)

    def initData(self):
        # To demonstrate, do something that takes a long time (for example
        # 20 seconds) and update progress bar.
        print("begin initData")
        loop = 10000
        for i in range(loop):
            self.qProgressBar.setValue(int((i+1)/loop*100))
            for j in range(loop):
                temp = i + j

    def customEvent(self, event):
        print("customEvent:", event.type())
        if (event.type() == MyEvent.idType):
            self.label.setText("Received : {0}".format(event.get_data()))
            self.initData()
    
if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)

    w = MainWindow()
    screen = QtWidgets.QDesktopWidget().screenGeometry()
    w.setGeometry(screen.width()//2-200, screen.height()//2-200, 400, 400) # x, y, Width, Height
    w.show()
    
    sys.exit(app.exec_())
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-22 14:02:50

谢谢你。这是工作的最终结果!

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import sys
from PyQt5 import QtWidgets
from PyQt5.QtCore import QObject, QThread, pyqtSignal
from time import sleep

class Worker_InitData(QObject):
    finished = pyqtSignal()
    progress = pyqtSignal(int)

    def run(self):
        """Long-running task."""
        for i in range(10):
            sleep(1)
            self.progress.emit(i)
        self.finished.emit()

class MainWindow(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        super().__init__(parent)

        self.setWindowTitle("My MainWindow")
        self.qProgressBar = QtWidgets.QProgressBar(self)
        self.qProgressBar.setGeometry(100, 100, 200, 30)

        self.label = QtWidgets.QLabel("Hello", self)
        self.label.setGeometry(50, 50, 200, 20)

        self.initData()

    def reportProgress(self, i):
        self.qProgressBar.setValue(int((i+1)/10*100))
    
    def initData(self):
        # Step 2: Create a QThread object
        self.thread = QThread()
        # Step 3: Create a worker object
        self.worker = Worker_InitData()
        # Step 4: Move worker to the thread
        self.worker.moveToThread(self.thread)
        # Step 5: Connect signals and slots
        self.thread.started.connect(self.worker.run)
        self.worker.finished.connect(self.thread.quit)
        self.worker.finished.connect(self.worker.deleteLater)
        self.thread.finished.connect(self.thread.deleteLater)
        self.worker.progress.connect(self.reportProgress)
        # Step 6: Start the thread
        self.thread.start()
   
if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)

    w = MainWindow()
    screen = QtWidgets.QDesktopWidget().screenGeometry()
    w.setGeometry(screen.width()//2-200, screen.height()//2-200, 400, 400) # x, y, Width, Height
    w.show()
    
    sys.exit(app.exec_())
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67213686

复制
相关文章
datables之加载数据时显示进度条
如果配置datables加载数据的时候显示进度条呢? 如下图所示效果: 这个功能采用模态框实现,弹出模态框和关闭模态框 HTML代码:(随便放在一个位置,因为是隐藏的) <%--等待加载数据滚动条模态
手撕代码八百里
2020/07/28
1.7K0
datables之加载数据时显示进度条
如何在Mysql的Docker容器启动时初始化数据库
Docker在开发中使用的越来越多了,最近搞了一个Spring Boot应用,为了方便部署将Mysql也放在Docker中运行。那么怎么初始化 SQL脚本以及数据呢?
码农小胖哥
2020/06/01
3.2K0
python: 显示进度条
Method 调用 tqdm 库: from tqdm import tqdm Example try: from tqdm import tqdm except: import os os.system('sudo pip3 install tqdm') from tqdm import tqdm lst = [1, 2, 3] pbar = tqdm(lst) for (idx, ele) in enumerate(pbar): main() pb
JNingWei
2018/09/27
1.8K0
python: 显示进度条
[Python] 使用print作进度条(解决end=''时print不显示的问题)
Python的print()末尾自带\n,如果不想要末尾的\n可以使用end=''控制末尾的字符。 例如这样:
kr
2022/09/26
6.5K0
springboot如何在项目启动时初始化资源-ApplicationRunner
实现ApplicationRunner,并重写run方法即可 @Component public class InitPortJob implements ApplicationRunner { private final static Logger logger = LoggerFactory.getLogger(InitPortJob.class); //数量待调整 public static BlockingQueue<Integer> portQueue = new
Vincent-yuan
2021/10/28
3830
SpringBoot 启动时初始化数据
在使用 springboot 搭建项目的时候,有时候会碰到在项目启动时初始化一些操作的需求,针对这种需求 springboot(spring) 提供了以下几种方案:
BUG弄潮儿
2021/10/08
2K0
Python显示进度条,实时显示处理进度
发现了一个工具,tqdm,大家可以了解一下,使用tqdm就不需要自己来写代码显示进度了 在大多数时候,我们的程序会一直进行循环处理。这时候,我们非常希望能够知道程序的处理进度,由此来决定接下来该做些什么。接下来告诉大家如何简单又漂亮的实现这一功能。 #如何使用这个类 使用这个类很简单,只需要两步即可完成,如下:
py3study
2020/01/08
4.2K0
大屏数据显示优化
大屏数据的页面里面包含了一些3D地图和世界航班趋势图,反应上来有个问题,就是动画比较卡顿。
frontoldman
2019/09/02
4.1K0
附件下载显示进度条
使用axios进行流处理文件下载的过程中,如果文件比较大,就需要等待整个文件流都下载到内存中才会弹出浏览器的下载文件保存对话框,这种方式在下载小文件的场景没什么问题,但是遇到大文件,一方面是浏览器的下载保存对话框半天都不会响应客户,这样体验不是很好;另外一方面是受到客户端内存的限制。
学以致用丶
2022/06/29
1.9K0
磁盘显示没有初始化找到数据法子[通俗易懂]
没有初始化是因为分区表损坏了,导致移动硬盘出现没有初始化。磁盘显示没有初始化找到数据法子
全栈程序员站长
2022/11/08
1.8K0
磁盘显示没有初始化找到数据法子[通俗易懂]
laravel post提交数据时显示异常
这是由于在laravel框架中有此要求:任何指向 web 中 POST, PUT 或 DELETE 路由的 HTML 表单请求都应该包含一个 CSRF 令牌,否则,这个请求将会被拒绝。
全栈程序员站长
2022/07/07
1K0
Springboot上传文件&显示进度条
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/137674.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/05
4.8K0
Python 如何实时显示进度条?
日常工作和学习中,经常需要观察当前任务的执行进度,如果一个执行时间很长的任务,能够有进度条实时的显示当前的任务进度,那么将非常方便。如何快速的实现?
double
2019/08/09
4K0
Python 如何实时显示进度条?
python进度条显示-tqmd模块
安装 anaconda 是自动集成的 如果导入不存在,直接pip pip install tqdm 参数 #参数介绍 iterable=None, desc=None, 传入str类型,作为进度条标题(类似于说明) total=None, 预期的迭代次数 leave=True, file=None, ncols=None, 可以自定义进度条的总长度 mininterval=0.1, 最小的更新间隔 maxinterval=10.0, 最大更新间隔 miniters=None,
诡途
2020/10/16
1.7K0
python进度条显示-tqmd模块
在 Python 程序中显示进度条
转自 http://my.oschina.net/jhao104/blog/681507 1、利用标准输出 先说一下文本系统的控制符: \r: 将光标移动到当前行的首位而不换行; \n:将光标移动到下一行,并不移动到首位; \r\n:将光标移动到下一行首位。 示例代码如下: import sys from time import sleep def viewBar(i): """ 进度条效果 :param i: :return: """
Crossin先生
2018/04/17
2.6K0
在 Python 程序中显示进度条
idhttp 下载 添加进度条显示
function TFrAutoUpdate.DownLoadFile(sURL, sFName: string): boolean;
战神伽罗
2019/08/20
9910
室内全彩大屏数据显示优化
室内全彩大屏数据的页面里面包含了一些3D地图和世界航班趋势图,反应上来有个问题,就是动画比较卡顿。
用户6436533
2019/10/12
1.8K0
Python使用扩展库tqdm显示进度条
感谢湖南工业大学王平老师的交流,要不然我还不知道有这么一个库。 tqdm在阿拉伯语中表示“progress”,而在西班牙语中则是“I love you so much”的缩写。 首先需要使用pip install tqdm安装这个扩展库。 执行下面的代码(代码中的sleep()函数是为了模拟特定工作所需时间): from tqdm import tqdm, trange from time import sleep s = 0 for i in tqdm(range(10)): s += i
Python小屋屋主
2018/04/16
2K0
Python使用扩展库tqdm显示进度条
Python 程序执行时如何显示进度条?
先来说下 tqdm 的使用场景,工作中有时候会遇到这样的问题,想要将某个任务执行很多次,显而易见,可以使用 for 循环来控制它重复执行很多次。
abs_zero
2018/07/25
1.6K0
Python 程序执行时如何显示进度条?
Python使用扩展库progressbar显示进度条
首先https://pypi.python.org/pypi/progressbar2/3.20.0下载whl文件,然后使用pip进行本地安装。 导入后面代码所需要的库: import time import logging import progressbar 执行下面的代码: bar = progressbar.ProgressBar() for i in bar(range(100)): time.sleep(0.02) 运行效果如图(文中截图只显示最终运行结果,请自行运行代码观看运行过程,下
Python小屋屋主
2018/04/16
2.5K0
Python使用扩展库progressbar显示进度条

相似问题

如何在执行大SQLCommand VB.Net时显示进度条

20

在初始化数据库时显示进度条

13

如何在Webservice加载数据时显示进度条?

20

如何在加载Firebase数据时显示进度条

13

如何在从web加载数据时显示进度条?

31
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文