PyQt5是一个针对Python语言的GUI框架,其中QProgressBar是其进度条组件之一。本文将详细讲解如何在Python中使用PyQt5创建进度条的完整使用攻略。
一、创建进度条
要创建一个进度条,首先需要导入PyQt5的QtWidgets模块和QtCore模块:
from PyQt5.QtWidgets import QApplication, QWidget, QHBoxLayout, QVBoxLayout, QProgressBar, QPushButton
from PyQt5.QtCore import Qt, QTimer
然后创建一个QWidget类型的主窗口,并在其中创建一个QProgressBar对象。由于进度条的值是在程序运行中动态改变的,因此需要为QProgressBar设置一个初始值。
class MainWindow(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.progress = QProgressBar(self)
self.progress.setGeometry(10, 10, 200, 30)
self.progress.setValue(0)
现在,就可以在主窗口中看到一个进度条了。接下来,需要添加一个按钮,通过点击按钮来触发进度的改变。
class MainWindow(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.progress = QProgressBar(self)
self.progress.setGeometry(10, 10, 200, 30)
self.progress.setValue(0)
self.button = QPushButton('Start', self)
self.button.move(10, 50)
在按钮被点击时,进度条的值会开始动态改变,因此需要为按钮定义一个槽函数,用于控制进度条的值的变化。
class MainWindow(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.progress = QProgressBar(self)
self.progress.setGeometry(10, 10, 200, 30)
self.progress.setValue(0)
self.button = QPushButton('Start', self)
self.button.move(10, 50)
self.button.clicked.connect(self.startProgressBar)
def startProgressBar(self):
self.progress.setValue(0)
for i in range(0, 101):
self.progress.setValue(i)
现在,当按钮被点击时,进度条的值将从0开始,逐步增加到100。
二、定时器停止进度条
如果希望进度条的值能够在一定的时间内自动增加,可以使用QTimer和一个计数器来实现。在计数器的值达到一定的数值时,进度条停止改变。
class MainWindow(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.progress = QProgressBar(self)
self.progress.setGeometry(10, 10, 200, 30)
self.progress.setValue(0)
self.button = QPushButton('Start', self)
self.button.move(10, 50)
self.button.clicked.connect(self.startProgressBar)
self.timer = QTimer(self)
self.timer.timeout.connect(self.updateProgressBar)
self.counter = 0
def startProgressBar(self):
self.progress.setValue(0)
self.timer.start(100)
def updateProgressBar(self):
self.counter += 1
if self.counter > 100:
self.timer.stop()
else:
self.progress.setValue(self.counter)
在这个例子中,定时器每100ms就会触发一次,开始改变进度条的值。计数器的初始值为0,每当计数器的值增加时,进度条的值也会跟着改变。当计数器的值增加到100时,进度条就停止改变。
三、示例说明
下面是一个完整的示例程序:
from PyQt5.QtWidgets import QApplication, QWidget, QHBoxLayout, QVBoxLayout, QProgressBar, QPushButton
from PyQt5.QtCore import Qt, QTimer
class MainWindow(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.progress = QProgressBar(self)
self.progress.setGeometry(10, 10, 200, 30)
self.progress.setValue(0)
self.button = QPushButton('Start', self)
self.button.move(10, 50)
self.button.clicked.connect(self.startProgressBar)
self.timer = QTimer(self)
self.timer.timeout.connect(self.updateProgressBar)
self.counter = 0
def startProgressBar(self):
self.progress.setValue(0)
self.timer.start(100)
def updateProgressBar(self):
self.counter += 1
if self.counter > 100:
self.timer.stop()
else:
self.progress.setValue(self.counter)
if __name__ == '__main__':
app = QApplication([])
window = MainWindow()
window.show()
app.exec_()
在这个程序中,点击按钮“Start”后,进度条的值会自动增加,当进度条的值增加到100后,进度条停止改变。
另外还有一个示例,这个示例从命令行接收一个参数n,用于控制进度条的改变速度。当n的值越小,进度条改变的速度就越快。
from PyQt5.QtWidgets import QApplication, QWidget, QHBoxLayout, QVBoxLayout, QProgressBar
from PyQt5.QtCore import Qt, QTimer
import sys
class MainWindow(QWidget):
def __init__(self, n):
super().__init__()
self.n = n
self.initUI()
def initUI(self):
self.progress = QProgressBar(self)
self.progress.setGeometry(10, 10, 200, 30)
self.progress.setValue(0)
self.timer = QTimer(self)
self.timer.timeout.connect(self.updateProgressBar)
self.counter = 0
def startProgressBar(self):
self.progress.setValue(0)
self.timer.start(100)
def updateProgressBar(self):
self.counter += self.n
if self.counter > 100:
self.timer.stop()
else:
self.progress.setValue(self.counter)
if __name__ == '__main__':
n = int(sys.argv[1]) if len(sys.argv) > 1 else 1
app = QApplication([])
window = MainWindow(n)
window.show()
app.exec_()
在这个程序中,运行程序前需要从命令行输入一个参数n,用于指定进度条的改变速度。例:python progressbar.py 3,表示进度条的值每次增加3。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PyQt5 QProgressBar – 如何创建进度条 - Python技术站