Gauge View (circle view)

graphicsView是Qt中的一个图形视图框架,可以用于创建各种自定义图形界面元素,包括仪表盘。下面是一个简单的graphicsView仪表盘的实现示例: ```python from PyQt5.QtWidgets import * from PyQt5.QtCore import * from PyQt5.QtGui import * class GaugeWidget(QWidget): def __init__(self, parent=None): super(GaugeWidget, self).__init__(parent) self.value = 0 self.minValue = 0 self.maxValue = 100 self.warningValue = 80 self.alarmValue = 90 self.backgroundColor = Qt.white self.needleColor = Qt.red self.warningColor = Qt.yellow self.alarmColor = Qt.red self.textColor = Qt.black self.font = QFont('Arial', 12) self.setFixedSize(200, 200) def setValue(self, value): self.value = value self.update() def setRange(self, minValue, maxValue): self.minValue = minValue self.maxValue = maxValue self.update() def setWarningRange(self, warningValue, alarmValue): self.warningValue = warningValue self.alarmValue = alarmValue self.update() def setBackgroundColor(self, color): self.backgroundColor = color self.update() def setNeedleColor(self, color): self.needleColor = color self.update() def setWarningColor(self, color): self.warningColor = color self.update() def setAlarmColor(self, color): self.alarmColor = color self.update() def setTextColor(self, color): self.textColor = color self.update() def setFont(self, font): self.font = font self.update() def paintEvent(self, event): painter = QPainter(self) painter.setRenderHint(QPainter.Antialiasing) painter.fillRect(event.rect(), self.backgroundColor) rect = QRectF(10, 10, self.width() - 20, self.height() - 20) startAngle = 45 spanAngle = 270 valueAngle = startAngle + (self.value - self.minValue) * spanAngle / (self.maxValue - self.minValue) # 绘制刻度盘 painter.save() painter.translate(self.width() / 2, self.height() / 2) painter.rotate(startAngle) painter.setPen(QPen(Qt.black, 2)) painter.setFont(self.font) for i in range(11): angle = i * spanAngle / 10 painter.drawLine(rect.width() / 2, 0, rect.width() / 2 - 20, 0) painter.drawText(rect.width() / 2 - 30, -5, 20, 10, Qt.AlignCenter, str(int(self.minValue + i * (self.maxValue - self.minValue) / 10))) painter.rotate(angle) painter.restore() # 绘制指针 painter.save() painter.translate(self.width() / 2, self.height() / 2) painter.rotate(valueAngle) painter.setPen(QPen(self.needleColor, 3)) painter.drawLine(0, 0, rect.width() / 2 - 20, 0) painter.restore() # 绘制警告区域 painter.save() painter.translate(self.width() / 2, self.height() / 2) painter.rotate(startAngle) painter.setPen(QPen(self.warningColor, 10)) painter.drawArc(rect, spanAngle * self.warningValue / (self.maxValue - self.minValue), spanAngle * (self.alarmValue - self.warningValue) / (self.maxValue - self.minValue)) painter.restore() # 绘制报警区域 painter.save() painter.translate(self.width() / 2, self.height() / 2) painter.rotate(startAngle) painter.setPen(QPen(self.alarmColor, 10)) painter.drawArc(rect, spanAngle * self.alarmValue / (self.maxValue - self.minValue), spanAngle * (self.maxValue - self.alarmValue) / (self.maxValue - self.minValue)) painter.restore() # 绘制数值 painter.setPen(QPen(self.textColor)) painter.setFont(self.font) painter.drawText(0, self.height() - 20, self.width(), 20, Qt.AlignCenter, str(self.value)) ``` 使用该类创建一个仪表盘的示例代码如下: ```python app = QApplication(sys.argv) gauge = GaugeWidget() gauge.setRange(0, 200) gauge.setWarningRange(160, 180) gauge.setValue(100) gauge.show() sys.exit(app.exec_()) ``` 该示例创建了一个范围为0到200的仪表盘,警告区域为160到180,当前值为100。可以根据需要调整范围、警告区域和当前值等参数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值