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