Pyo*_*trK 1 python pyqt python-3.x pyqt5
我想创建一个如下所示的 QWidget/QDialog:
色环
或:
Windows 颜色选择器
我知道QColorDialog,但我不想使用它。
我知道这是一个老问题,
但由于唯一的答案性能很差,这是我的版本。它使用两个叠加的渐变,而不是单独渲染小部件中的每个点。
class ColorCircle(QWidget):
def __init__(self, parent=None) -> None:
super().__init__(parent=parent)
self.radius = 0
def resizeEvent(self, ev: QResizeEvent) -> None:
self.radius = min([self.width()/2, self.height()/2])
def paintEvent(self, ev: QPaintEvent) -> None:
center = QPointF(self.width()/2, self.height()/2)
p = QPainter(self)
hsv_grad = QConicalGradient(center, 90)
for deg in range(360):
col = QColor.fromHsvF(deg / 360, 1, self.v)
hsv_grad.setColorAt(deg / 360, col)
val_grad = QRadialGradient(center, self.radius)
val_grad.setColorAt(0.0, QColor.fromHsvF(0.0, 0.0, self.v, 1.0))
val_grad.setColorAt(1.0, Qt.transparent)
p.setPen(Qt.transparent)
p.setBrush(hsv_grad)
p.drawEllipse(self.rect())
p.setBrush(val_grad)
p.drawEllipse(self.rect())
Run Code Online (Sandbox Code Playgroud)
可以在这个要点中找到完整功能的版本(带有信号、设置/获取功能)https://gist.github.com/tobi08151405/7b0a8151c9df1a41a87c1559dac1243a
| 归档时间: |
|
| 查看次数: |
3218 次 |
| 最近记录: |