pyqt5 經過QLinearGradient 繪製取色板

要繪製HSV取色板,通常經過繪製前景色和背景色的方式實現,先繪製前景,而後繪製背景,前景是HSV顏色空間,從左到右,背景是亮度,從上到下,xs和ys是鼠標的當前的位置。spa

    def graphicsView_rgb_palette(self,xs,ys):
        try:
            rect = QRectF(0, 0, self.graphicsView_color_palette.width() - 2,
                          self.graphicsView_color_palette.height() - 2)
            self.graphicsView_color_palette_scene = QGraphicsScene(rect)  # 建立場景
            self.graphicsView_color_palette.setScene(self.graphicsView_color_palette_scene)
            #前景,HSV空間 ,從360到0
            colorGradient = QLinearGradient(0, 0, self.graphicsView_color_palette.width(),0)
            colorGradient.setSpread(QGradient.RepeatSpread);
            colorGradient.setColorAt(0, QColor(255, 0, 0, 255));
            colorGradient.setColorAt(0.166, QColor(255, 255, 0, 255));
            colorGradient.setColorAt(0.333, QColor(0, 255, 0, 255));
            colorGradient.setColorAt(0.5, QColor(0, 255, 255, 255));
            colorGradient.setColorAt(0.666, QColor(0, 0, 255, 255));
            colorGradient.setColorAt(0.833, QColor(255, 0, 255, 255));
            colorGradient.setColorAt(1, QColor(255, 0, 0, 255));

            #背景,調節亮度,最上面透明,最下面白色
            blackGradient = QLinearGradient(0, 0, 0,self.graphicsView_color_palette.height())
            blackGradient.setSpread(QGradient.RepeatSpread);
            blackGradient.setColorAt(0,QColor(0,0,0,0));
            blackGradient.setColorAt(1, QColor(255,255,255,250));
            #繪製取色板鼠標指示點
            item = QGraphicsEllipseItem(-10, -10, 20, 20)  # 建立橢圓--場景座標
            item.setPos(xs, ys)  # 給圖元設置在場景中的座標(移動圖元)--圖元中心座標
            item.setBrush(Qt.black)  # 設置畫刷
            #
            self.graphicsView_color_palette_scene.setBackgroundBrush(colorGradient); #設置前景色
            self.graphicsView_color_palette_scene.setForegroundBrush(blackGradient); #設置背景色

            self.graphicsView_color_palette_scene.addItem(item)
            self.graphicsView_color_palette_scene.clearSelection()  # 【清除選擇】
        except Exception as e:
            self.UART_Display_Text(str(e))
相關文章
相關標籤/搜索