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