pyqt5-进度条控制


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())

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM