本文给大家带来一个利用pyqt制作的颜色调节器,通过拨动滚动条或者旋钮就可以调整rgb三色进行颜色的微调,效果如下:
编辑
本文实现的是不同的UI设计,实现的相同的功能,我们先分析以下思路:
- 首先进行UI页面设计
- 分析颜色如何进行调整的逻辑
- 将改动的数据反馈到UI页面
先看左侧的滚动条的功能:
1 UI页面设计
首先,创建QLabel来显示颜色变换的舞台,并指定默认为红色背景,以及创建lb2来显示数据的变化。
self.lb = QLabel() # 设置标签的背景色 self.lb.setAutoFillBackground(True) palette = self.lb.palette() palette.setColor(self.lb.backgroundRole(), QColor(255, 0, 0)) # 红色背景 self.lb.setPalette(palette) self.lb2=QLabel() self.lb2.setText("颜色值:(255, 0, 0)")
编辑
接下来,创建滑块,这里的滑块需要三个,分别代表红绿蓝的数据,并通过改变滑块来实现红绿蓝三色的数字变化。
self.s1 = QScrollBar() self.s1.setMaximum(255) self.s1.sliderMoved.connect(self.sliderval) self.s2=QScrollBar() self.s2.setMaximum(255) self.s2.sliderMoved.connect(self.sliderval) self.s3 = QScrollBar() self.s3.setMaximum(255) self.s3.sliderMoved.connect(self.sliderval)
2 数据改变函数
咱们通过配置槽函数sliderval来修改颜色值,并以palette调色板的方式返回到self.lb上,就可以实现了颜色随数字的变化而变化了。
def sliderval(self): print(self.s1.value(),self.s2.value(),self.s3.value()) palette = self.lb.palette() palette.setColor(self.lb.backgroundRole(), QColor(self.s1.value(), self.s2.value(), self.s3.value())) # 红色背景 self.lb.setPalette(palette) self.lb2.setText("颜色值:(%s, %s, %s)" % (self.s1.value(),self.s2.value(),self.s3.value()))
编辑
3 完整代码
为了方便大家的实现和学习,完整代码贴上。(爱看不看,不看拉到!)
# -*- coding:utf-8 -*- """ ------------------------------------------------ File Name: 滚动条.py Description: Author: lzq date:2024-07-27 19:16 ------------------------------------------------ """ import sys from PyQt6.QtGui import QColor from PyQt6.QtWidgets import QDialog, QPushButton, QVBoxLayout, QApplication, QWidget, QHBoxLayout, QScrollBar, QLabel class MyWidget(QWidget): def __init__(self, parent=None): super(MyWidget, self).__init__(parent) self.setWindowTitle("滚动条QScrollBar测试") self.resize(500,150) self.lb = QLabel() # 设置标签的背景色 self.lb.setAutoFillBackground(True) palette = self.lb.palette() palette.setColor(self.lb.backgroundRole(), QColor(255, 0, 0)) # 红色背景 self.lb.setPalette(palette) self.lb2=QLabel() self.lb2.setText("颜色值:(255, 0, 0)") hbox=QHBoxLayout() self.s1 = QScrollBar() self.s1.setMaximum(255) self.s1.sliderMoved.connect(self.sliderval) self.s2=QScrollBar() self.s2.setMaximum(255) self.s2.sliderMoved.connect(self.sliderval) self.s3 = QScrollBar() self.s3.setMaximum(255) self.s3.sliderMoved.connect(self.sliderval) hbox.addWidget(self.lb) hbox.addWidget(self.lb2) hbox.addWidget(self.s1) hbox.addWidget(self.s2) hbox.addWidget(self.s3) self.setGeometry(500,200,500,300) self.setLayout(hbox) def sliderval(self): print(self.s1.value(),self.s2.value(),self.s3.value()) palette = self.lb.palette() palette.setColor(self.lb.backgroundRole(), QColor(self.s1.value(), self.s2.value(), self.s3.value())) # 红色背景 self.lb.setPalette(palette) self.lb2.setText("颜色值:(%s, %s, %s)" % (self.s1.value(),self.s2.value(),self.s3.value())) if __name__=='__main__': app = QApplication(sys.argv) w = MyWidget() w.show() sys.exit(app.exec())