基于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实现图片批量重命名工具

    使用Python实现图片批量重命名工具

    这篇文章主要为大家介绍了一个基于Python开发的图形界面工具,用于批量重命名文件夹中的图片文件,文中的示例代码讲解详细,感兴趣的小伙伴可以参考下
    2025-04-04
  • python打印当前文件的绝对路径并解决打印为空的问题

    python打印当前文件的绝对路径并解决打印为空的问题

    这篇文章主要介绍了python打印当前文件的绝对路径并解决打印为空的问题,文中补充介绍了python中对文件路径的获取方法,需要的朋友可以参考下
    2023-03-03
  • PyTorch 中的傅里叶卷积实现示例

    PyTorch 中的傅里叶卷积实现示例

    这篇文章主要介绍了PyTorch 中的傅里叶卷积实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • python 创建一个空dataframe 然后添加行数据的实例

    python 创建一个空dataframe 然后添加行数据的实例

    今天小编就为大家分享一篇python 创建一个空dataframe 然后添加行数据的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-06-06
  • Python实现12种降维算法的示例代码

    Python实现12种降维算法的示例代码

    数据降维算法是机器学习算法中的大家族,与分类、回归、聚类等算法不同,它的目标是将向量投影到低维空间,以达到某种目的如可视化,或是做分类。本文将利用Python实现12种降维算法,需要的可以参考一下
    2022-04-04
  • 使用python搭建代理IP池实现接口设置与整体调度

    使用python搭建代理IP池实现接口设置与整体调度

    在网络爬虫中,代理IP池是一个非常重要的组件,由于许多网站对单个IP的请求有限制,因此,我们需要一个代理IP池,在本文中,我们将使用Python来构建一个代理IP池,然后,我们将使用这个代理IP池来访问我们需要的数据,文中有相关的代码示例供大家参考,需要的朋友可以参考下
    2023-12-12
  • python免杀技术shellcode的加载与执行

    python免杀技术shellcode的加载与执行

    本文主要介绍了python免杀技术shellcode的加载与执行,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • Python操作lxml库之基础使用篇

    Python操作lxml库之基础使用篇

    lxml库是python的第三方库,安装方式也是十分简单,下面这篇文章主要给大家介绍了关于Python操作lxml库之基础使用篇的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2022-12-12
  • python静态方法实例

    python静态方法实例

    这篇文章主要介绍了python静态方法,实例分析了python静态方法的使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-01-01
  • 详解Python中最难理解的点-装饰器

    详解Python中最难理解的点-装饰器

    记得我好几年前刚学Python的时候,看装饰器就觉得看九阴真经里面的怪文字,完全看不懂,确实装饰器是一个非常难以理解的概念,相信很多初学者一定也有这样的困惑,所以篇文章主要介绍了关于Python中装饰器的相关资料,需要的朋友可以参考下。
    2017-04-04

最新评论