案例-pyqt进度条案例

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *

import queue     #如果不加载这个模板,pyinstaller打包后,可能无法运行requests模板
import requests
################################################

################################################
class Widget(QWidget):
    def __init__(self, *args, **kwargs):
        super(Widget, self).__init__(*args, **kwargs)
        layout = QHBoxLayout(self)

        # 增加进度条
        self.progressBar = QProgressBar(self, minimumWidth=400)
        self.progressBar.setValue(0)
        layout.addWidget(self.progressBar)

        # 增加下载按钮
        self.pushButton = QPushButton(self, minimumWidth=100)
        self.pushButton.setText("下载")
        layout.addWidget(self.pushButton)

        # 绑定按钮事件
        self.pushButton.clicked.connect(self.on_pushButton_clicked)

    # 下载按钮事件
    def on_pushButton_clicked(self):
        the_url = ‘http://cdn2.ime.sogou.com/b24a8eb9f06d6bfc08c26f0670a1feca/5c9de72d/dl/index/1553820076/sogou_pinyin_93e.exe‘
        the_filesize = requests.get(the_url, stream=True).headers[‘Content-Length‘]
        the_filepath ="D:/sogou_pinyin_93e.exe"
        the_fileobj = open(the_filepath, ‘wb‘)
        #### 创建下载线程
        self.downloadThread = downloadThread(the_url, the_filesize, the_fileobj, buffer=10240)
        self.downloadThread.download_proess_signal.connect(self.set_progressbar_value)
        self.downloadThread.start()

    # 设置进度条
    def set_progressbar_value(self, value):
        self.progressBar.setValue(value)
        if value == 100:
            QMessageBox.information(self, "提示", "下载成功!")
            return

##################################################################
#下载线程
##################################################################
class downloadThread(QThread):
    download_proess_signal = pyqtSignal(int)                        #创建信号

    def __init__(self, url, filesize, fileobj, buffer):
        super(downloadThread, self).__init__()
        self.url = url
        self.filesize = filesize
        self.fileobj = fileobj
        self.buffer = buffer

    def run(self):
        try:
            rsp = requests.get(self.url, stream=True)                #流下载模式
            offset = 0
            for chunk in rsp.iter_content(chunk_size=self.buffer):
                if not chunk: break
                self.fileobj.seek(offset)                            #设置指针位置
                self.fileobj.write(chunk)                            #写入文件
                offset = offset + len(chunk)
                proess = offset / int(self.filesize) * 100
                self.download_proess_signal.emit(int(proess))        #发送信号
            #######################################################################
            self.fileobj.close()    #关闭文件
            self.exit(0)            #关闭线程

        except Exception as e:
            print(e)

####################################
#程序入口
####################################
if __name__ == "__main__":
    app = QApplication(sys.argv)
    w = Widget()
    w.show()
    sys.exit(app.exec_())

原文地址:https://www.cnblogs.com/candhaohao/p/12323113.html

时间: 2024-10-30 12:02:17

案例-pyqt进度条案例的相关文章

easyui制作进度条案例demo

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>fe</title> <link rel="stylesheet" type="text/css" href="easyui/easyui.css"> <link rel="stylesheet" t

【PyQt5-Qt Designer】QProgressBar() 进度条

QProgressBar() 进度条 QProgressBar简介 QProgressBar小部件提供了一个水平或垂直的进度条. 进度条用于向用户指示操作的进度,并向他们保证应用程序仍在运行. 进度条使用steps的概念.您可以通过指定最小和最大可能的step值来设置它,并且当您稍后将当前step值赋给它时,它将显示已经完成的step的百分比.百分比是通过将进度 (value() - minimum()) / (maximum() - minimum())来计算的. 您可以使用setMinimu

ProgressBar 系统进度条【案例】

布局 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <LinearLayout android:la

1.CCProgressTo进度动作,条形进度条,扇形进度条

 1 Bar形进度 CCSprite * proBack = CCSprite::create("barback.png"); proBack->setPosition(ccp(winSize.width/2 - 100,winSize.height/2)); addChild(proBack); CCProgressTimer * left = CCProgressTimer::create(CCSprite::create("bar.png")); l

进度条-线性渐变

/* 进度条 */div.progress { width: 600px; margin: 10px auto; height: 20px; line-height: 20px; font-size: 14px; background: #F7F7F7; border-radius: 4px; box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);}div.progress div.bar { float: left; width: 60%; backgr

我的Android进阶之旅------&gt;Android自定义View实现带数字的进度条(NumberProgressBar)

今天在Github上面看到一个来自于 daimajia所写的关于Android自定义View实现带数字的进度条(NumberProgressBar)的精彩案例,在这里分享给大家一起来学习学习!同时感谢daimajia的开源奉献! 第一步.效果展示 图1.蓝色的进度条 图2.红色的进度条 图3.多条颜色不同的进度条 图4.多条颜色不同的进度条 版权声明:本文为[欧阳鹏]原创文章,欢迎转载,转载请注明出处! [http://blog.csdn.net/ouyang_peng/article/deta

Android-做个性化的进度条

1.案例效果图 2.准备素材                                progress1.png(78*78)              progress2.png(78*78) 3.原理 采用一张图片作为ProgressBar的背景图片(一般采用颜色比较浅的).另一张是进度条的图片(一般采用颜色比较深的图片).进度在滚动时:进度图片逐步显示,背景图片逐步隐藏,达到上面的效果. 4.灵感来自Android控件提供的源码 4.1 默认带进度的进度条,如下图 1 <Progre

一个Notification 进度条插件(android,NJS实现,直接就可使用)

参考文章:http://ask.dcloud.net.cn/article/503 源码地址下载 如题,分享一个Notification 进度条插件(android,用js调用原生api实现,直接就可以使用).参考1: http://ask.dcloud.net.cn/article/155参考2:http://ask.dcloud.net.cn/question/2464 详细介绍: 最近有一个需求是,android更新资源包时,需要在通知栏里显示下载进度条,于是就搜索了下已有的解决方案发现并

软件工程--构建之法 学习进度条

软件工程的学习进度条 周次 学习内容 代 码 量 1 1.软件工程课程的意义 2.完成博客的注册:http://home.cnblogs.com/u/chengxs/ 3.总结目前学习过程中的困惑,提出几个问题,并带着问题学习这门课:http://www.cnblogs.com/chengxs/p/5248956.html 4.选择一个自己熟悉的软件,并对它进行评价:Linux下的ubuntu软件优点和缺点: http://www.cnblogs.com/chengxs/p/5266355.ht