目录

  • 0使用效果
  • 1所需python包
  • 2python小技巧
    • 2.1控件数组
    • 2.2将控件作为属性
    • 2.3怎样重设控件颜色
    • 2.4一些用到的字符串操作
    • 2.5鼠标位置像素颜色
    • 2.6窗口始终置顶
    • 2.7文本框不允许编辑但允许复制
  • 3完整代码
  • 4exe文件包

0使用效果


如下面动图所示,点击取色按钮后,将鼠标移动到想要取色的位置,等待两秒即可取色:


点击save color按钮可以将颜色存储到color library区域,同时如图所示,

! ! ! !红框内所有的方形元件其实都是按钮,点击后能获得颜色信息 ! ! ! !


信息格式为:(173, 189, 163) #ADBDA3 (48, 35, 189)

1所需python包

  • PySide2
  • pyautogui
  • pyperclip
  • ctypes
from PySide2.QtWidgets import QApplication,QWidget,QLineEdit
from PySide2.QtWidgets import QLabel,QPushButton
from PySide2.QtGui import QIcon,QFont
from PySide2.QtCore import Qtimport sys
sys.path.append("...")import time
import pyautogui as pag
import pyperclip
from ctypes import *

2python小技巧

2.1控件数组

和matlab一样,python得控件也能构成数组,例如我在创建小颜色框时,是这么写的:

# 存储颜色框
for i in range(0,2):for j in range(0,10):storeColorBox=QPushButton(self)storeColorBox.setGeometry((0.04+0.093*j)*Width,(0.475+0.07*i)*Height,0.08*Width,0.06*Height)storeColorBox.setStyleSheet(self.SS_Color_Box)storeColorBox.setProperty("storeId",i*10+j)storeColorBox.setProperty("Color",'#FFFFFF')storeColorBox.clicked.connect(self.selectedStore)self.storeList.append(storeColorBox)

就是将各个颜色框存入了self.storeList这个数组,
想要例如想要调用第i个颜色框,就可以这么写:

storeBox=self.storeList[i]

2.2将控件作为属性

将控件控件作为属性赋给另一个控件
因为我们想要点击左侧标签时获得对应文本框内信息:


就可以这么写(举个例子):

# 创建文本框
self.CB1=QLineEdit(self)
self.CB1.setText("255,255,255")
self.CB1.move(0.62*Width,0.03*Height)
self.CB1.resize(0.35*Width,0.065*Height)
self.CB1.setFont(qf)
self.CB1.setStyleSheet(self.SS_Inf_Box)# 创建标签
self.CL1=QPushButton(self)
self.CL1.setGeometry(0.448*Width,0.025*Height,0.14*Width,0.075*Height)
self.CL1.setStyleSheet(self.SS_Inf_Label)
self.CL1.setText("RGB")
self.CL1.setFont(qf)
self.CL1.setProperty('Children',self.CB1) # 把控件作为属性
self.CL1.clicked.connect(self.copyInf)# 与回调函数相连

然后我的回调函数是这样写的:

def copyInf(self):infLabel=self.sender()infBox=infLabel.property('Children') # 通过找到属性找到对应控件pyperclip.copy(infBox.text())

2.3怎样重设控件颜色

还是通过setStyleSheet设置嗷,不过把字符串部分应该放颜色的部分换成了要重设的颜色:

self.mainBox.setStyleSheet("QPushButton{background:"+self.curColor_HEX+";border: 3px solid rgb(150,150,150);border-radius:8px}")

2.4一些用到的字符串操作

字符串字母大写

STR=STR.upper()

字符串去掉空格
例如把(10, 50, 255)变为(10,50,255)

STR=STR.replace(" ", "")

字符串去掉两头括号
例如把(10,50,255)变为10,50,255

STR=STR[1:-1]

2.5鼠标位置像素颜色

如何获得当前鼠标位置像素颜色

import pyautogui as pag
from ctypes import *x,y=pag.position()
RGB=get_color(x,y)# 获取x,y位置像素颜色
def get_color(x, y):gdi32 = windll.gdi32user32 = windll.user32hdc = user32.GetDC(None)  # 获取颜色值pixel = gdi32.GetPixel(hdc, x, y)  # 提取RGB值r = pixel & 0x0000ffg = (pixel & 0x00ff00) >> 8b = pixel >> 16return [r, g, b]

2.6窗口始终置顶

self.setWindowFlags(Qt.WindowStaysOnTopHint)

2.7文本框不允许编辑但允许复制

用setFocusPolicy(Qt.NoFocus),例如程序中:

self.CB1.setFocusPolicy(Qt.NoFocus)
self.CB2.setFocusPolicy(Qt.NoFocus)
self.CB3.setFocusPolicy(Qt.NoFocus)

3完整代码

from PySide2.QtWidgets import QApplication,QWidget,QLineEdit
from PySide2.QtWidgets import QLabel,QPushButton
from PySide2.QtGui import QIcon,QFont
from PySide2.QtCore import Qtimport sys
sys.path.append("...")import time
import pyautogui as pag
import pyperclip
from ctypes import *# ===========================================================================================
# 相关函数:# 获取x,y位置像素颜色
def get_color(x, y):gdi32 = windll.gdi32user32 = windll.user32hdc = user32.GetDC(None)  # 获取颜色值pixel = gdi32.GetPixel(hdc, x, y)  # 提取RGB值r = pixel & 0x0000ffg = (pixel & 0x00ff00) >> 8b = pixel >> 16return [r, g, b]# HEX转RGB
def hex2rgb(hexcolor):'''HEX转RGB:param hexcolor: int or str:return: Tuple[int, int, int]>>> hex2rgb(16777215)(255, 255, 255)>>> hex2rgb('0xffffff')(255, 255, 255)'''hexcolor = int(hexcolor, base=16) if isinstance(hexcolor, str) else hexcolorrgb = ((hexcolor >> 16) & 0xff, (hexcolor >> 8) & 0xff, hexcolor & 0xff)return rgb# RGB转HEX
def rgb2hex(r, g, b):color = "#"color += str(hex(r)).replace('x','0')[-2:]color += str(hex(g)).replace('x','0')[-2:]color += str(hex(b)).replace('x','0')[-2:]return color# RGB转HSV
def rgb2hsv(r, g, b):r, g, b = r/255.0, g/255.0, b/255.0mx = max(r, g, b)mn = min(r, g, b)m = mx-mnif mx == mn:h = 0elif mx == r:if g >= b:h = ((g-b)/m)*60else:h = ((g-b)/m)*60 + 360elif mx == g:h = ((b-r)/m)*60 + 120elif mx == b:h = ((r-g)/m)*60 + 240if mx == 0:s = 0else:s = m/mxv = mxH = h / 2S = s * 255.0V = v * 255.0return (round(H), round(S), round(V))# ===========================================================================================
# 窗口类:
class Window(QWidget):def __init__(self,Width=450,Height=600):super().__init__() self.setWindowTitle("getScreenColor")self.setWindowFlags(Qt.WindowStaysOnTopHint) self.Width=Widthself.Height=Height# 样式表self.SS_bkg_Label="QLabel{background: rgb(220,220,220);color:rgb(62,62,62);border-radius:8px}"self.SS_Inf_Label="QPushButton{background: rgb(79,148,204);color:rgb(240,240,240);border-radius:8px}"self.SS_Inf_Box="QLineEdit{border-radius:3px;border: 2px solid rgb(149,179,215);color:rgb(92,92,92)}"self.SS_Main_Box="QPushButton{background: #FFFFFF;border: 3px solid rgb(150,150,150);border-radius:8px}"self.SS_Color_Box="QPushButton{background: #FFFFFF;border: 2px solid rgb(150,150,150);border-radius:3px}"self.SS_btn_1="QPushButton{background: rgb(214,219,233);color:rgb(82,82,82)}"self.SS_btn_2="QPushButton{background: rgb(225,235,205);color:rgb(82,82,82)}"self.SS_btn_3="QPushButton{background: rgb(232,191,190);color:rgb(82,82,82)}"# 该类私有变量或属性self.defaultColor=['#58827E','#144853','#4C6756','#849E77','#ADBDA3','#6B1B1E','#A94047','#E05E60','#F8A2AF','#E4CEDB','#B0A087','#7F877C','#C7C7BB','#D4C7BE','#E3E4DF','#C63866','#FE676E','#FD8F52','#FFBF73','#FFDCA2','#7292B8','#769EB8','#B4C5D7','#C5D5EC','#D9E0EA','#681F71','#7E0D5D','#6E57A5','#B589BE','#C993B7','#3978A4','#81AAAE','#EBCFC4','#FDB8A8','#E3929B','#7D7294']self.curBoxId=0self.curColor_RGB=[255,255,255]self.curColor_HEX='#FFFFFF'self.curColor_HSV=[0,0,255]self.storeList=[]self.defaultList=[]# 框架构造函数调用self.setSize()self.partition()self.setInfBox()self.setMainBox()self.setBtn()self.setIcon()self.setColorBox()# ================================================================================================# 颜色框回调函数部分:def selectedMain(self):tColor_HEX=self.curColor_HEXtColor_RGB=hex2rgb('0x'+tColor_HEX[1:])tColor_HSV=rgb2hsv(tColor_RGB[0], tColor_RGB[1], tColor_RGB[2])pyperclip.copy(str(tColor_RGB)+' '+tColor_HEX+' '+str(tColor_HSV)) print(str(tColor_RGB)+' '+tColor_HEX+' '+str(tColor_HSV))def selectedStore(self):storeBox=self.sender()tColor_HEX=storeBox.property("Color")tColor_RGB=hex2rgb('0x'+tColor_HEX[1:])tColor_HSV=rgb2hsv(tColor_RGB[0], tColor_RGB[1], tColor_RGB[2])pyperclip.copy(str(tColor_RGB)+' '+tColor_HEX+' '+str(tColor_HSV)) print(str(tColor_RGB)+' '+tColor_HEX+' '+str(tColor_HSV))def selectedDefault(self):defaultBox=self.sender()tNum=defaultBox.property("defaultId")tColor_HEX=self.defaultColor[tNum]tColor_RGB=hex2rgb('0x'+tColor_HEX[1:])tColor_HSV=rgb2hsv(tColor_RGB[0], tColor_RGB[1], tColor_RGB[2])pyperclip.copy(str(tColor_RGB)+' '+tColor_HEX+' '+str(tColor_HSV)) print(str(tColor_RGB)+' '+tColor_HEX+' '+str(tColor_HSV))# ------------------------------------------------------------------------------------------------# 颜色信息标签回调def copyInf(self):infLabel=self.sender()infBox=infLabel.property('Children')pyperclip.copy(infBox.text())print(infBox.text())# ------------------------------------------------------------------------------------------------# 按钮回调函数部分:def getColor(self):time.sleep(2)x,y=pag.position()self.curColor_RGB=get_color(x,y)self.curColor_HSV=rgb2hsv(self.curColor_RGB[0], self.curColor_RGB[1], self.curColor_RGB[2])self.curColor_HEX=rgb2hex(self.curColor_RGB[0], self.curColor_RGB[1], self.curColor_RGB[2]).upper()RGB_STR=str(self.curColor_RGB).replace(" ", "")[1:-1]HSV_STR=str(self.curColor_HSV).replace(" ", "")[1:-1]self.CB1.setText(RGB_STR) self.CB2.setText(self.curColor_HEX)self.CB3.setText(HSV_STR) self.mainBox.setStyleSheet("QPushButton{background:"+self.curColor_HEX+";border: 3px solid rgb(150,150,150);border-radius:8px}")def saveColor(self):if self.curBoxId<20:tempBox=self.storeList[self.curBoxId]tempBox.setProperty("Color",self.curColor_HEX)tempBox.setStyleSheet("QPushButton{background:"+self.curColor_HEX+";border: 2px solid rgb(150,150,150);border-radius:3px}")self.curBoxId+=1def deleteColor(self):if self.curBoxId>0:self.curBoxId-=1tempBox=self.storeList[self.curBoxId]tempBox.setProperty("Color",'#FFFFFF')tempBox.setStyleSheet(self.SS_Color_Box)# ================================================================================================# 框架构造函数部分:def setSize(self):# 调整框架大小self.setGeometry(80,80,self.Width,self.Height)self.setMaximumSize(self.Width,self.Height)self.setMinimumSize(self.Width,self.Height)def setIcon(self):# 设置图标appIcon=QIcon("ICON.ico")self.setWindowIcon(appIcon)def partition(self):# 各部分划分Width=self.WidthHeight=self.Heightqf=QFont()qf.setBold(True)qf.setPointSize(12)qf.setFamily("Cambria")   # --part1--当前颜色显示框背景-----self.bkgLabel1=QLabel(self)self.bkgLabel1.setGeometry(0.024*Width,0.015*Height,0.4*Width,0.3*Height)self.bkgLabel1.setStyleSheet(self.SS_bkg_Label)# --part2--当前颜色信息背景-----self.bkgLabel2=QLabel(self)self.bkgLabel2.setGeometry(0.448*Width,0.015*Height,0.528*Width,0.3*Height)self.bkgLabel2.setStyleSheet("QLabel{background: rgb(235,235,235);border-radius:8px}")# --part3--颜色存储库背景-----self.bkgLabel3=QLabel(self)self.bkgLabel3.setGeometry(0.024*Width,0.41*Height,0.952*Width,0.205*Height)self.bkgLabel3.setStyleSheet(self.SS_bkg_Label)self.bkgLabel3_title=QLabel(self)self.bkgLabel3_title.setGeometry(0.038*Width,0.415*Height,0.4*Width,0.05*Height)self.bkgLabel3_title.setStyleSheet(self.SS_bkg_Label)self.bkgLabel3_title.setText("Color Library") self.bkgLabel3_title.setFont(qf)# --part4--预设颜色库背景-----self.bkgLabel4=QLabel(self)self.bkgLabel4.setGeometry(0.024*Width,0.63*Height,0.952*Width,0.355*Height)self.bkgLabel4.setStyleSheet(self.SS_bkg_Label)self.bkgLabel4_title=QLabel(self)self.bkgLabel4_title.setGeometry(0.038*Width,0.635*Height,0.8*Width,0.05*Height)self.bkgLabel4_title.setStyleSheet(self.SS_bkg_Label)self.bkgLabel4_title.setText("Color Library(default)") self.bkgLabel4_title.setFont(qf)def setInfBox(self):# 设置信息显示框Width=self.WidthHeight=self.Height# 字体设置qf=QFont()qf.setBold(True)qf.setPointSize(12)qf.setFamily("Cambria")   # 绘制颜色信息框qf.setPointSize(10)self.CB1=QLineEdit(self) self.CB1.setText("255,255,255") self.CB1.move(0.62*Width,0.03*Height)  self.CB1.resize(0.35*Width,0.065*Height)self.CB1.setFont(qf)self.CB1.setStyleSheet(self.SS_Inf_Box)#self.CB2=QLineEdit(self) self.CB2.setText("#FFFFFF") self.CB2.move(0.62*Width,0.13*Height)  self.CB2.resize(0.35*Width,0.065*Height)self.CB2.setFont(qf)self.CB2.setStyleSheet(self.SS_Inf_Box)#self.CB3=QLineEdit(self) self.CB3.setText("0,0,255") self.CB3.move(0.62*Width,0.23*Height)  self.CB3.resize(0.35*Width,0.065*Height)self.CB3.setFont(qf)self.CB3.setStyleSheet(self.SS_Inf_Box)#self.CB1.setFocusPolicy(Qt.NoFocus)self.CB2.setFocusPolicy(Qt.NoFocus)self.CB3.setFocusPolicy(Qt.NoFocus)# 绘制颜色信息标签self.CL1=QPushButton(self)self.CL1.setGeometry(0.448*Width,0.025*Height,0.14*Width,0.075*Height)self.CL1.setStyleSheet(self.SS_Inf_Label)self.CL1.setText("RGB")self.CL1.setFont(qf)self.CL1.setProperty('Children',self.CB1)self.CL1.clicked.connect(self.copyInf)#self.CL2=QPushButton(self)self.CL2.setGeometry(0.448*Width,0.125*Height,0.14*Width,0.075*Height)self.CL2.setStyleSheet(self.SS_Inf_Label)self.CL2.setText("HEX")self.CL2.setFont(qf)self.CL2.setProperty('Children',self.CB2)self.CL2.clicked.connect(self.copyInf)#self.CL3=QPushButton(self)self.CL3.setGeometry(0.448*Width,0.225*Height,0.14*Width,0.075*Height)self.CL3.setStyleSheet(self.SS_Inf_Label)self.CL3.setText("HSV")self.CL3.setFont(qf)self.CL3.setProperty('Children',self.CB3)self.CL3.clicked.connect(self.copyInf)def setMainBox(self):# 设置其他labelWidth=self.WidthHeight=self.Height# 左上角当前颜色显示框self.mainBox=QPushButton(self)self.mainBox.setGeometry(0.04*Width,0.025*Height,0.368*Width,0.28*Height)self.mainBox.setStyleSheet(self.SS_Main_Box)self.mainBox.clicked.connect(self.selectedMain)def setBtn(self):# 设置按钮Width=self.WidthHeight=self.Height# 按钮字体qf=QFont()qf.setBold(True)qf.setPointSize(10)qf.setFamily("Cambria")# 获取颜色按钮self.bnt1=QPushButton(self)self.bnt1.setGeometry(0.024*Width,0.33*Height,0.4*Width,0.06*Height)self.bnt1.setStyleSheet(self.SS_btn_1)self.bnt1.setText("Get Screen Color")self.bnt1.setFont(qf)self.bnt1.clicked.connect(self.getColor)# 保存颜色按钮self.bnt2=QPushButton(self)self.bnt2.setGeometry(0.444*Width,0.33*Height,0.26*Width,0.06*Height)self.bnt2.setStyleSheet(self.SS_btn_1)self.bnt2.setText("Save Color")self.bnt2.setFont(qf)self.bnt2.clicked.connect(self.saveColor)# 删除颜色按钮self.bnt3=QPushButton(self)self.bnt3.setGeometry(0.724*Width,0.33*Height,0.26*Width,0.06*Height)self.bnt3.setStyleSheet(self.SS_btn_3)self.bnt3.setText("Delete Last")self.bnt3.setFont(qf)self.bnt3.clicked.connect(self.deleteColor)def setColorBox(self):# 绘制存储颜色及预设颜色框Width=self.WidthHeight=self.Height# 存储颜色框for i in range(0,2):for j in range(0,10):storeColorBox=QPushButton(self)storeColorBox.setGeometry((0.04+0.093*j)*Width,(0.475+0.07*i)*Height,0.08*Width,0.06*Height)storeColorBox.setStyleSheet(self.SS_Color_Box)storeColorBox.setProperty("storeId",i*10+j)storeColorBox.setProperty("Color",'#FFFFFF')storeColorBox.clicked.connect(self.selectedStore)self.storeList.append(storeColorBox)# 预设颜色框for i in range(0,4):for j in range(0,10):if i*10+j<36:defaultColorBox=QPushButton(self)defaultColorBox.setGeometry((0.04+0.093*j)*Width,(0.7+0.07*i)*Height,0.08*Width,0.06*Height)defaultColorBox.setStyleSheet("QPushButton{background: "+self.defaultColor[i*10+j]+";border: 2px solid rgb(150,150,150);border-radius:3px}")defaultColorBox.setProperty("defaultId",i*10+j)defaultColorBox.clicked.connect(self.selectedDefault)self.defaultList.append(storeColorBox)# ===========================================================================================
# 函数调用:
myapp = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(myapp.exec_())

4exe文件包

链接: https://pan.baidu.com/s/1c2peKrGkg1E92Ata-QRSEg
提取码: v85a

如何使用python制作一款屏幕颜色提取器,附带exe文件相关推荐

  1. Python制作小软件——4. 利用PyInstaller打包成exe文件

    在前面:Python制作小软件--3. 利用PyQt5实现界面中的功能,介绍完了Python中如何呼唤出我们的界面后 最后最重要的就是将我们做好的东西,全部打包成一个.exe可执行文件.这里我们使用的 ...

  2. 【含源码】低价机票秒抢,用Python制作一款低价机票提示器

    目录 前言 一.程序展示 二.程序讲解 三.程序制作 1.低价机票数据的抓取 2.钉钉机器人的设置 3.程序定时执行 总结 前言 每次出行前都要提前去各大网站看优惠机票,浪费时间不说还不一定及时. 所 ...

  3. 用Python自带的tkinter制作一款简易音乐播放器(附工程文件)

    tkinter GUI 界面: 基于tkinter库实现简易可视化界面,并调用pygame等第三方库实现播放歌曲.切换歌曲.歌曲进度调整.批量导入曲库等基本功能:程序设置为单曲循环模式,需要手动切换歌 ...

  4. 小哥哥你有98K吗?利用Python制作一款多功能变声器!

    前言 好吧,关于这句小哥哥你有98K吗?出自别人口中经常说的玩笑话,我也略懂一些游戏嘛.不过不常玩,废话不多说,开始咱们今天的教程,非常简单! 利用Python制作一款多功能变声器! 咱们首先登陆百度 ...

  5. MATLAB 颜色提取器 —— APP 版

    MATLAB 颜色提取器 -- APP 版 日常设计GUI或者APP时,往往需要与颜色打交道,文章链接: MATLAB 如何画出漂亮的图. 在颜色选取上可以通过 颜色对照表 来选择合适的颜色,有个不方 ...

  6. MATLAB App Designer 特别篇:RGB颜色提取器

    在大家的要求下,我将RGB颜色提取器App化了,并做出了以下几个改进: 保留小数位数标准化 颜色格式多样化: 支持16进制码及HSV格式 数据输出标准化: 其他的用法可以看之前GUI版本的相关文章: ...

  7. Python即时网络爬虫项目: 内容提取器的定义(Python2.7版本)

    1. 项目背景 在Python即时网络爬虫项目启动说明中我们讨论一个数字:程序员浪费在调测内容提取规则上的时间太多了(见上图),从而我们发起了这个项目,把程序员从繁琐的调测规则中解放出来,投入到更高端 ...

  8. python语言能做什么游戏好玩_太好玩了我用 Python 制作一款小游戏

    超级玛丽.魂斗罗.坦克大战.冒险岛--提到这些游戏,"80后"."90后"滔滔不绝,掀起一波回忆杀. 最近不少媒体发文称:"小霸王被申请破产" ...

  9. python代码翻译器-利用Python制作一款简单的翻译软件

    导语 之前写了两篇: Python之百度翻译小爬虫Python之有道翻译小爬虫 随手再加个Google翻译,然后把它们整合到一个Demo上,制作了一款简单的翻译软件.让我们愉快地开始吧~ 开发工具 P ...

最新文章

  1. LSGO:团队学习模式“社群化”讨论!
  2. SylixOS普通定时器精度分析
  3. linux基础命令rpm,rpm常用命令集合1
  4. python中的集合set
  5. android导航栏高度开启,如何在Android中真正获得导航栏高度
  6. (day06 dfs+剪枝)剑指 Offer 12. 矩阵中的路径
  7. 常用的三款专业的OCR文字识别软件
  8. 用matlab绘制函数图像
  9. 单位元转换万元怎么转_元换算万元单位(元与万元的换算器)
  10. 推荐几个好用的pdf翻译工具
  11. js数组交集、差集和并集
  12. Only fullscreen opaque activities can request orientation比较完美的解决方法,黑白屏问题解决
  13. 我们是如何设计出,让玩家们有“上瘾症”的抽卡系统的
  14. 对java栈的初步认识
  15. 洛谷_3975 [TJOI2015]弦论(后缀自动机)
  16. 高中人教版地理教案三-Leo老师
  17. 计算机音乐对演出的用处,音乐对想象力的影响作用
  18. 如何 获得 自身程序 的 版本号 ???? 急!!!!!!!!!!!!
  19. 【网页设计】期末大作业html+css(我的音乐网站)
  20. 使用docker安装zookeeper

热门文章

  1. opencv实现两张图片叠加
  2. MOSFET开关管的结构以及在MATLAB中的连接
  3. 软件工程 -- 状态转换图
  4. python geopy 北斗导航_【Python】使用geopy由经纬度找地理信息
  5. 网易互联网产品运营管培生面试经历--从群面到终面面试经验分享
  6. python ppt 绘图_Python数据分析-Matplotlib绘图基础
  7. 网页获取到的图片bease64编码,转化为二进制,进而保存为图片
  8. ae字体预设下载_AE超强文字预设包(附插件和教程)Videohive 2D Text Preset Pack for Animation Composer Plug-in...
  9. 1-2 经济学发展史、实证/规范经济学
  10. 怎样才能成为一名优秀的高薪程序员?