基于PyQt6实现颜色选择器小工具

 更新时间:2024年11月21日 08:22:53   作者:一晌小贪欢  
这篇文章主要为大家详细介绍了如何基于PyQt6实现颜色选择器小工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下

程序流程

1. 界面设计

1.1 整体布局

该应用程序使用了PyQt6框架构建了一个简单的颜色选择器界面。整体布局采用了垂直布局(QVBoxLayout)和水平布局(QHBoxLayout)相结合的方式,实现了功能区与控制区的合理分布。

功能展示区:位于界面的上部,通过一个标签(QLabel)展示了所选颜色的预览,并显示了当前颜色的RGB值和十六进制值。

控制区:位于界面的下部,包含三个旋钮(QDial)分别用于调节红色、绿色和蓝色的强度值,以及两个按钮(QPushButton),分别用于复制当前颜色的RGB值和十六进制值到剪贴板。

1.2 控件设计

颜色预览标签:通过设置标签的背景色来实时展示用户选择的颜色。

旋钮控件:每个旋钮的范围被设定为0至255,对应了颜色三文素的最大值。旋钮下方的小标签用于显示当前旋钮的值。

按钮控件:两个按钮分别用于触发复制颜色值到剪贴板的操作。

2. 功能实现

2.1 颜色值的动态更新

当用户旋转任一旋钮时,会触发onDialValueChanged方法。此方法首先更新各旋钮对应的数值标签,然后根据三个旋钮的当前值重新设置颜色预览标签的背景色,同时更新颜色值显示区域的内容。

2.2 复制颜色值

应用程序提供了两种方式复制颜色值:

复制RGB值:点击“复制RGB颜色”按钮时,会将当前颜色的RGB值以字符串形式复制到系统剪贴板。

复制十六进制值:点击“复制16进制颜色”按钮时,同样将颜色值以十六进制的形式复制到剪贴板。

3. 代码结构

3.1 类定义

MyWidget类继承自QWidget,是整个应用的核心部分,包含了所有界面元素的初始化及事件处理逻辑。

3.2 初始化方法

在__init__构造函数中,完成了界面元素的创建、布局设置、信号槽连接等操作,确保了应用程序启动后能够正确显示并响应用户的交互。

3.3 事件处理

onDialValueChanged方法负责处理旋钮值变化的事件,实现了颜色值的动态更新。

on_btn_clicked和on_btn_clicked2方法则分别对应了两个按钮的点击事件,实现了颜色值的复制功能。

完整代码

import sys
import pyperclip
from PyQt6.QtCore import Qt
from PyQt6.QtGui import QFont, QColor
from PyQt6.QtWidgets import QDialog, QPushButton, QVBoxLayout, QApplication, QWidget, QDial, QLabel, QHBoxLayout


class MyWidget(QWidget):
    def __init__(self, parent=None):
        super(MyWidget, self).__init__(parent)
        self.setWindowTitle("颜色选择器")
        self.resize(800,400)


        ww_layout = QVBoxLayout(self)

        self.labelColor = QLabel()

        # 设置标签的背景色
        self.labelColor.setAutoFillBackground(True)
        palette = self.labelColor.palette()
        palette.setColor(self.labelColor.backgroundRole(), QColor(255, 0, 0))  # 红色背景
        self.labelColor.setPalette(palette,)
        self.ltk = QLabel()
        self.ltext = QLabel()
        self.ltext2 = QLabel()
        self.ltext.setText("颜色值RGB:(255, 0, 0)")
        # 添加按钮
        self.btn = QPushButton("复制RGB颜色")
        self.btn.clicked.connect(self.on_btn_clicked)
        self.btn.setFixedSize(100, 30)

        self.btn2 = QPushButton("复制16进制颜色")
        self.btn2.clicked.connect(self.on_btn_clicked2)
        self.btn2.setFixedSize(100, 30)

        self.ltext2.setText("颜色值16进制:#FF0000")

        textVlayout = QVBoxLayout()
        textVlayout.addWidget(self.labelColor)
        textVlayout.addWidget(self.ltext)
        textVlayout.addWidget(self.ltext2)
        # self.bt 设置在 x = 200,y = 100
        textVlayout.addWidget(self.btn)
        textVlayout.addWidget(self.btn2)

        # textVlayout.addWidget(self.btn)
        textVlayout.addWidget(self.ltk)



        self.dial = QDial()
        self.dial.setRange(0,255)
        self.dial.setNotchesVisible(True)
        self.dial.valueChanged.connect(self.onDialValueChanged)

        self.lb = QLabel('0', self)
        self.lb.setAlignment(Qt.AlignmentFlag.AlignCenter)
        self.lb.setFont(QFont('Arial Black', 16))

        self.dial2 = QDial()
        self.dial2.setRange(0, 255)
        self.dial2.setNotchesVisible(True)
        self.dial2.valueChanged.connect(self.onDialValueChanged)

        self.lb2 = QLabel('0', self)
        self.lb2.setAlignment(Qt.AlignmentFlag.AlignCenter)
        self.lb2.setFont(QFont('Arial Black', 16))

        self.dial3 = QDial()
        self.dial3.setRange(0, 255)
        self.dial3.setNotchesVisible(True)
        self.dial3.valueChanged.connect(self.onDialValueChanged)

        self.lb3=QLabel('0',self)
        self.lb3.setAlignment(Qt.AlignmentFlag.AlignCenter)
        self.lb3.setFont(QFont('Arial Black',16))

        hlayout = QHBoxLayout(self)

        vlayout = QVBoxLayout(self)
        vlayout.addWidget(self.dial)
        vlayout.addWidget(self.lb)

        vlayout2 = QVBoxLayout(self)
        vlayout2.addWidget(self.dial2)
        vlayout2.addWidget(self.lb2)

        vlayout3 = QVBoxLayout(self)
        vlayout3.addWidget(self.dial3)
        vlayout3.addWidget(self.lb3)

        hlayout.addLayout(vlayout)
        hlayout.addLayout(vlayout2)
        hlayout.addLayout(vlayout3)
        # self.setLayout(hlayout)

        ww_layout.addLayout(textVlayout)
        ww_layout.addLayout(hlayout)
        self.setLayout(ww_layout)

    def onDialValueChanged(self):
        self.lb.setText(str(self.dial.value()))
        self.lb2.setText(str(self.dial2.value()))
        self.lb3.setText(str(self.dial3.value()))
        palette = self.labelColor.palette()
        palette.setColor(self.labelColor.backgroundRole(), QColor(self.dial.value(), self.dial2.value(), self.dial3.value()))  # 红色背景
        self.labelColor.setPalette(palette)
        self.ltext.setText("颜色值RGB:(%s, %s, %s)" % (self.dial.value(), self.dial2.value(), self.dial3.value()))
        self.ltext2.setText("颜色值16进制:#%02X%02X%02X" % (self.dial.value(), self.dial2.value(), self.dial3.value()))


    def on_btn_clicked(self):
        # 将RGB颜色值复制到剪贴板
        pyperclip.copy("颜色值RGB:(%s, %s, %s)" % (self.dial.value(), self.dial2.value(), self.dial3.value()))
        self.ltk.setText("颜色值RGB—复制成功")

    def on_btn_clicked2(self):
        # 将16进制颜色值复制到剪贴板
        pyperclip.copy("颜色值16进制:#%02X%02X%02X" % (self.dial.value(), self.dial2.value(), self.dial3.value()))
        self.ltk.setText("颜色值16进制—复制成功")

if __name__=='__main__':
    app = QApplication(sys.argv)
    w = MyWidget()
    w.show()
    sys.exit(app.exec())

效果图

到此这篇关于基于PyQt6实现颜色选择器小工具的文章就介绍到这了,更多相关PyQt6颜色选择器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python+drawpad实现CPU监控小程序

    Python+drawpad实现CPU监控小程序

    这篇文章主要为大家详细介绍了如何利用Python+drawpad实现一个简单的CPU监控小程序,文中示例代码讲解详细,感兴趣的小伙伴可以尝试一下
    2022-08-08
  • 如何在scrapy中集成selenium爬取网页的方法

    如何在scrapy中集成selenium爬取网页的方法

    这篇文章主要介绍了如何在scrapy中集成selenium爬取网页的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • 利用Python生成随机验证码详解

    利用Python生成随机验证码详解

    怎么用python绕验证码是个令人头秃的事情,这篇文章将为大家详细 介绍如何利用Python生成随机的验证码,文中的示例代码简洁易懂,感兴趣的小伙伴可以跟随小编一起试试
    2022-01-01
  • python算法与数据结构朋友圈与水杯实验题分析实例

    python算法与数据结构朋友圈与水杯实验题分析实例

    这篇文章主要介绍了python算法与数据结构朋友圈与水杯实验题分析,总的来说这并不是难题,那为什么要拿出这道题介绍?拿出这道题真正想要传达的是解题的思路,以及不断优化探寻最优解的过程。希望通过这道题能给你带来一种解题优化的思路
    2022-12-12
  • python 类中函数名前后加下划线的具体使用

    python 类中函数名前后加下划线的具体使用

    在Python编程语言中,函数名前后有下划线是一种常见的命名约定,,被广泛应用于类中的函数,本文将介绍下划线命名风格的由来、使用场景以及如何正确应用它,感兴趣的可以了解一下
    2024-01-01
  • 基于python的ini配置文件操作工具类

    基于python的ini配置文件操作工具类

    这篇文章主要为大家详细介绍了基于python的ini配置文件操作工具类,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-04-04
  • Python3.7 读取音频根据文件名生成脚本的代码

    Python3.7 读取音频根据文件名生成脚本的代码

    这篇文章主要介绍了Python3.7 读取音频根据文件名生成字幕脚本的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-04-04
  • Python Pillow Image.save 保存为jpg图片压缩问题

    Python Pillow Image.save 保存为jpg图片压缩问题

    Pillow 库支持多种图片格式,Pillow 能够很轻松地实现图片格式之间的转换。本文就来详细的介绍一下Image.save的具体使用,感兴趣的可以了解一下
    2021-11-11
  • 基于python3+OpenCV实现人脸和眼睛识别

    基于python3+OpenCV实现人脸和眼睛识别

    这篇文章主要为大家详细介绍了基于python3+OpenCV实现人脸和眼睛识别,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • python函数的高级应用详解

    python函数的高级应用详解

    这篇文章主要为大家介绍了python函数的高级应用,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2021-11-11

最新评论