首页 > 其他 > 详细

pyqt5-进度条控制

时间:2020-02-18 22:37:35      阅读:204      评论:0      收藏:0      [点我收藏+]

1.基于自定义类的方式

  继承自QProgressBar类,然后重写timerEvent方法,当该组件设置定时器的时候,会自己处理定时的处理方法,完成相应的功能

from PyQt5.Qt import *

class MyQProgressBar(QProgressBar):
    def timerEvent(self, evt):
        value = self.value()
        if value <= self.maximum()-1:
            self.setValue(value+1)
        else:
            self.killTimer(evt.timerId())

class MyWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("进度条")
        self.resize(500,500)
        self.setup_ui()

    def setup_ui(self):
        self.qpb = MyQProgressBar(self)
        self.qpb.resize(300,30)
        self.qpb.setValue(20)

        # self.qpb.startTimer(1000,Qt.VeryCoarseTimer)

        self.btn = QPushButton("开始",self)
        self.btn.move(0,50)

        self.btn.clicked.connect(self.change_progressbar)

    def change_progressbar(self):
        if self.btn.text() == "开始":
            self.btn.setText("结束")
            self.qpb_time_id = self.qpb.startTimer(1000,Qt.VeryCoarseTimer)
        else:
            self.btn.setText("开始")
            self.qpb.killTimer(self.qpb_time_id)

if __name__ == __main__:
    import sys
    app = QApplication(sys.argv)
    window = MyWindow()
    window.show()
    sys.exit(app.exec())

 

2.基于QTimer类来实现

from PyQt5.Qt import *

class MyWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("进度条")
        self.resize(500,500)
        self.setup_ui()

    def setup_ui(self):
        self.qpb = QProgressBar(self)
        self.qpb.resize(300,30)
        self.qpb.setValue(20)

        # self.qpb.startTimer(1000,Qt.VeryCoarseTimer)

        self.btn = QPushButton("开始",self)
        self.btn.move(0,50)
        self.timer = QTimer(self.qpb)

        #Qtimer类当定时间隔到了之后会发射一个timerout信号,这样就可以变更进度条的值
        self.timer.timeout.connect(self.change_value)

        #这里用按钮来启动一个定时器(光创建一个定时器并不会起作用),同时这个按钮也可以选择停止一个定时器
        self.btn.clicked.connect(self.change_progressbar)

    def change_value(self):
        if self.qpb.value() < self.qpb.maximum():
            self.qpb.setValue(self.qpb.value()+1)
        else:
            self.timer.stop()

    def change_progressbar(self):
        if self.btn.text() == "开始":
            self.btn.setText("结束")
            self.timer.start(1000)
        else:
            self.btn.setText("开始")
            self.timer.stop()

if __name__ == __main__:
    import sys
    app = QApplication(sys.argv)
    window = MyWindow()
    window.show()
    sys.exit(app.exec())

 

pyqt5-进度条控制

原文:https://www.cnblogs.com/candhaohao/p/12328928.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!