pyqt 实现环形进度
时间: 2023-07-04 22:15:44 浏览: 97
要实现环形进度条可以使用QProgressBar和QPainter来实现。
首先,创建一个QProgressBar并将其隐藏:
```python
progress = QProgressBar(self)
progress.setGeometry(30, 40, 200, 200)
progress.setRange(0, 100)
progress.setTextVisible(False)
progress.hide()
```
然后,在绘制事件中使用QPainter绘制环形进度条:
```python
def paintEvent(self, event):
painter = QPainter(self)
painter.setRenderHint(QPainter.Antialiasing)
barWidth = 8
barColor = QColor(255, 255, 255)
# 绘制圆形
painter.setPen(Qt.NoPen)
painter.setBrush(QBrush(QColor("#333333")))
painter.drawEllipse(self.rect().center(), 100, 100)
# 绘制进度
painter.setPen(Qt.NoPen)
painter.setBrush(QBrush(barColor))
value = progress.value()
angle = value * 360.0 / progress.maximum()
painter.drawPie(self.rect().center().x() - 100, self.rect().center().y() - 100, 200, 200, 90 * 16, -angle * 16)
# 绘制圆环
painter.setBrush(Qt.NoBrush)
painter.setPen(QPen(barColor, barWidth))
painter.drawEllipse(self.rect().center(), 100 - barWidth / 2, 100 - barWidth / 2)
```
在更新进度时,需要同时更新QProgressBar和重新绘制环形进度条:
```python
def updateProgress(self, value):
progress.setValue(value)
self.update()
```
这样就可以实现一个简单的环形进度条了。完整代码如下:
```python
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QPainter, QBrush, QColor, QPen
from PyQt5.QtWidgets import QApplication, QWidget, QProgressBar
import sys
class Example(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setGeometry(300, 300, 280, 170)
self.setWindowTitle('环形进度条')
progress = QProgressBar(self)
progress.setGeometry(30, 40, 200, 200)
progress.setRange(0, 100)
progress.setTextVisible(False)
progress.hide()
def paintEvent(self, event):
painter = QPainter(self)
painter.setRenderHint(QPainter.Antialiasing)
barWidth = 8
barColor = QColor(255, 255, 255)
# 绘制圆形
painter.setPen(Qt.NoPen)
painter.setBrush(QBrush(QColor("#333333")))
painter.drawEllipse(self.rect().center(), 100, 100)
# 绘制进度
painter.setPen(Qt.NoPen)
painter.setBrush(QBrush(barColor))
value = progress.value()
angle = value * 360.0 / progress.maximum()
painter.drawPie(self.rect().center().x() - 100, self.rect().center().y() - 100, 200, 200, 90 * 16, -angle * 16)
# 绘制圆环
painter.setBrush(Qt.NoBrush)
painter.setPen(QPen(barColor, barWidth))
painter.drawEllipse(self.rect().center(), 100 - barWidth / 2, 100 - barWidth / 2)
def updateProgress(self, value):
progress.setValue(value)
self.update()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
ex.show()
sys.exit(app.exec_())
```