摘要:目錄使用效果所需包小技巧控件數組將控件作為屬性怎樣重設控件顏色一些用到的字符串操作鼠標位置像素顏色窗口始終置頂文本框不允許編輯但允許復制完整代碼文件包使用效果如下面動圖所示,點擊取色按鈕后,將鼠標移動到想要取色的位置,
如下面動圖所示,點擊取色按鈕后,將鼠標移動到想要取色的位置,等待兩秒即可取色:
點擊save color按鈕可以將顏色存儲到color library區域,同時如圖所示,
! ! ! !紅框內所有的方形元件其實都是按鈕,點擊后能獲得顏色信息 ! ! ! !
信息格式為:(173, 189, 163) #ADBDA3 (48, 35, 189)
from PySide2.QtWidgets import QApplication,QWidget,QLineEditfrom PySide2.QtWidgets import QLabel,QPushButtonfrom PySide2.QtGui import QIcon,QFontfrom PySide2.QtCore import Qtimport syssys.path.append("...")import timeimport pyautogui as pagimport pyperclipfrom ctypes import *
和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]
將控件控件作為屬性賦給另一個控件
因為我們想要點擊左側標簽時獲得對應文本框內信息:
就可以這么寫(舉個例子):
# 創建文本框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())
還是通過setStyleSheet設置嗷,不過把字符串部分應該放顏色的部分換成了要重設的顏色:
self.mainBox.setStyleSheet("QPushButton{background:"+self.curColor_HEX +";border: 3px solid rgb(150,150,150);border-radius:8px}")
字符串字母大寫
STR=STR.upper()
字符串去掉空格
例如把(10, 50, 255)變為(10,50,255)
STR=STR.replace(" ", "")
字符串去掉兩頭括號
例如把(10,50,255)變為10,50,255
STR=STR[1:-1]
如何獲得當前鼠標位置像素顏色
import pyautogui as pagfrom ctypes import *x,y=pag.position()RGB=get_color(x,y)# 獲取x,y位置像素顏色def get_color(x, y): gdi32 = windll.gdi32 user32 = windll.user32 hdc = user32.GetDC(None) # 獲取顏色值 pixel = gdi32.GetPixel(hdc, x, y) # 提取RGB值 r = pixel & 0x0000ff g = (pixel & 0x00ff00) >> 8 b = pixel >> 16 return [r, g, b]
self.setWindowFlags(Qt.WindowStaysOnTopHint)
用setFocusPolicy(Qt.NoFocus),例如程序中:
self.CB1.setFocusPolicy(Qt.NoFocus)self.CB2.setFocusPolicy(Qt.NoFocus)self.CB3.setFocusPolicy(Qt.NoFocus)
from PySide2.QtWidgets import QApplication,QWidget,QLineEditfrom PySide2.QtWidgets import QLabel,QPushButtonfrom PySide2.QtGui import QIcon,QFontfrom PySide2.QtCore import Qtimport syssys.path.append("...")import timeimport pyautogui as pagimport pyperclipfrom ctypes import *# ===========================================================================================# 相關函數:# 獲取x,y位置像素顏色def get_color(x, y): gdi32 = windll.gdi32 user32 = windll.user32 hdc = user32.GetDC(None) # 獲取顏色值 pixel = gdi32.GetPixel(hdc, x, y) # 提取RGB值 r = pixel & 0x0000ff g = (pixel & 0x00ff00) >> 8 b = pixel >> 16 return [r, g, b]# HEX轉RGBdef 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 hexcolor rgb = ((hexcolor >> 16) & 0xff, (hexcolor >> 8) & 0xff, hexcolor & 0xff) return rgb# RGB轉HEXdef 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轉HSVdef rgb2hsv(r, g, b): r, g, b = r/255.0, g/255.0, b/255.0 mx = max(r, g, b) mn = min(r, g, b) m = mx-mn if mx == mn: h = 0 elif mx == r: if g >= b: h = ((g-b)/m)*60 else: h = ((g-b)/m)*60 + 360 elif mx == g: h = ((b-r)/m)*60 + 120 elif mx == b: h = ((r-g)/m)*60 + 240 if mx == 0: s = 0 else: s = m/mx v = mx H = h / 2 S = s * 255.0 V = v * 255.0 return (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=Width self.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=0 self.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_HEX 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 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+=1 def deleteColor(self): if self.curBoxId>0: self.curBoxId-=1 tempBox=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.Width Height=self.Height qf=QFont() qf.setBold(True) qf.setPointSize(12
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/119553.html
摘要:反正老蔣這幾天依舊是短袖短褲空調狀態。從上個月開始,老蔣看到帶來的是兩款免費主題,這個月依舊是兩款免費主題。一款是比較時尚業務的主題,一款是工作室和公司主題。年月份,主題森林有提供款主題,官方限免是支持到月日,如果有需要可以到官方下載。今年的秋天好像來的比較晚,從二十四節氣中已經進入白露,但是氣溫還是在30度左右,國慶節期間均能達到30多度的高溫,真的很奇怪現在的天氣。反正老蔣這幾天依舊是短...
摘要:時間永遠都過得那么快,一晃從年注冊,到現在已經過去了年那些被我藏在收藏夾吃灰的文章,已經太多了,是時候把他們整理一下了。那是因為收藏夾太亂,橡皮擦給設置私密了,不收拾不好看呀。 ...
摘要:背景介紹將程序打包,無論是為了代碼復用,還是發布應用,都是必不可少的的技能,上次總結了一下利用打包成,這次我來說如何打包。導入往往我們使用打包不只是為了雙擊使用,有時也是為了代碼復用。礙于時間關系,將留待下一篇文章進行總結。 背景介紹 將程序打包,無論是為了代碼復用,還是發布應用,都是必不可少的的技能,上次總結了一下python利用cxfreeze打包成exe,這次我來說java如何打...
摘要:看看這些驚人的純實驗,也許你自己也可以嘗試一下。項目鏈接疊疊高游戲你可以不用來編寫一個游戲。這個純粹用實現的疊疊高游戲看上去很簡單,但是很有趣,而且圖形也很漂亮。項目鏈接鬼影漸變效果按鈕令人驚訝的是它是只用編寫的。 翻譯:瘋狂的技術宅原文:https://1stwebdesigner.com/12... 本文首發微信公眾號:jingchengyideng歡迎關注,每天都給你推送新鮮...
閱讀 1164·2021-11-22 15:24
閱讀 4440·2021-09-23 11:51
閱讀 2302·2021-09-08 09:36
閱讀 3514·2019-08-30 15:43
閱讀 1295·2019-08-30 13:01
閱讀 1115·2019-08-30 12:48
閱讀 530·2019-08-29 12:52
閱讀 3365·2019-08-29 12:41