PyQt5: QColor
Torna all’indice degli appunti
Un colore viene normalmente specificato secondo una delle seguenti 3 specifiche:
RGB (Red, Green and Blue)
HSV (Hue, Saturation and Value)
CMYK (Cyan, Magenta, Yellow and Black)
RGB Color
QColor è la classe che gestisce i colori. Il costruttore crea sempre un oggetto QColor in termini RGB.
Per ottenere il colore secondo le altre due specifiche, si utilizzano i metodi toHsv() e toCmyb(), che ritornano una copia dell’oggetto, nel formato desiderato:
L’oggetto QColor può essere settato passando i valori Red, Green, Blue al costruttore; per gli esempi a seguire considereremo il colore “Verde”.
Consultando lo spazio di colori in figura, per un verde scuro prendiamo il valore a metà tra black (0) e light-green (255), quindi 128:
>>> from PyQt5.QtGui import QColor >>> color = QColor(0, 128, 0) >>> color.getRgb() (0, 128, 0, 255) >>> color.toCmyk() <PyQt5.QtGui.QColor object at 0x033F15F0> >>> color.toHsv() <PyQt5.QtGui.QColor object at 0x033F1770>
E’ possibile passare al costruttore la stringa-colore esadecimale corrispondente:
>>> color_s = QColor("#008000") >>> color_s.getRgb() (0, 128, 0, 255)
Per recuperare i valori rgb si utilizza il metodo getRgb(), che ritorna una tupla con i valori: Red, Green, Blue e alpha-channel (trasparenza).
Per ottenere invece i singoli valori dei quattro precedenti parametri, si utilizzano gli omonimi metodi red(), green(), blue() ed alpha():
>>> color.red() 0 >>> color.green() 128 >>> color.blue() 0 >>> color.alpha() 255
Ovviamente i valori sono settabili in un colpo solo con il metodo setRgb(int, int, int, int), passando rispettivamente i valori red, green, blue e alpha, oppure singolarmente con i metodi setRed(int), setGreen(int), setBlue(int) e setAlpha(int):
>>> color_s.setBlue(20) >>> color_s.blue() 20
Il costruttore QColor accetta anche stringhe predefinite contenenti i “nomi” dei colori esistenti:
>>> hex_color = QColor("#008000") >>> n_color = QColor("Green") >>> hex_color.getRgb() == n_color.getRgb() True
Nota:
La stringa corrispondente al “green” (0, 128, 0) è rappresentata dai tre numeri in esadecimale, red “00” (0), green “80” (128) e blue “00” (0), che di seguito formano #008000″
se controlliamo su un qualsiasi color picker, noteremo la corrispondenza.
I nomi dei colori accettati dal costruttori sono reperibili con il metodo colorNames()
HSV Color
Come detto in precedenza, si costruisce un Qcolor in RGB e lo si converte in HSV con il metodo toHsv()
HSV è un sinonimo di HSL (Hue, Saturation, Lightness). Per ottenere i valori del colore secondo la specificha HSV, si utilizza il metodo getHsv(), che ritorna una tupla con i valori: Hue, Saturation, Value e alpha-channel (trasparenza).
Come nel caso della specifica RGB, è possibile ottenere i singoli valori con i metodi hue(), saturation(), value() e alpha(), e, in ugual misura, è possibile modificare tali valori con i setter corrispondenti: setHue(int), setSaturation(int), setValue(int) e
setAlpha(int):
>>> hsv = color.toHsv() >>> hsv.getHsv() (120, 255, 128, 255) >>> hsv.value() 128
HSL Color
Variante della specifica HSV (o viceversa), dove “L” sta per Lightness.
Stesso principio: si crea una copia del colore RGB con il metodo toHsl() e si ottengono i valori con il metodo getHsl(), o singolarmente con i metodi hue(), saturation(), lightness(). Per la modifica degli singoli valori, si utilizzano i metodi setHue(int), setSaturation(int), setLightness(int):
>>> hsl.getHsl() (120, 255, 64, 255) >>> hsl.lightness() 64
CMYK Color
Ovviamente non fa differenze il colore secondo questa specifica. Si crea la copia di oggetto QColor RGB con il metodo toCmyk() e si ottiene la tupla dei valori, con il metodo getCmyk(), oppure i singoli valori con i metodi: cyan(), magenta(), yellow(), black() e alpha().
Il settaggio dei valori quindi avrà i propri setter: setCyan(), setMagenta(), setYellow(), setBlack() e setAlpha():
>>> cmyk = color.toCmyk() >>> cmyk.getCmyk() (255, 0, 255, 127, 255) >>> cmyk.cyan() 255
Nota:
255 è il massimo valore che può raggiungere il byte che rappresenta il valore.
Quindi attenzione ai color picker che ragionano in percentuali inquanto 255 indica 100%.
Nell’ultimo caso il verde in CMYK ha un cyan = 100% (255), magenta = 0%, yellow = 100% (255) e black = 50% (127).
CREARE Color RGB da altri formati
E’ possibile fare anche il percorso inverso, ovvero ottenere un colore secondo le specifiche RGB, da un colore HSV, HSL o CMYK, utilizzando i metodi fromHsv(hue, saturation, value, alpha), fromHsl(hue, saturation, value, lightness) e fromCmyk(cyan, magenta, yellow, black, alpha):
>>> rgb_color = QColor.fromCmyk(255, 0, 255, 127, 255) >>> rgb_color.getRgb() == color.getRgb() True
VALIDATION
Quando costruiamo un colore passando una stringa, è possibile verificare che tale stringa esista tra i colori preconfezionati, utilizzando il metodo isValid(), o direttamente con il metodo isValidColor(color):
>>> QColor.isValidColor("Red") True >>> QColor.isValidColor("Foo") False >>> new_color = QColor("Foo") >>> new_color.isValid() False
Ma anche quando passiamo al costruttore valori errati:
>>> new_color = QColor(255, 255, 300, 300) >>> new_color.isValid() False >>> new_color = QColor(255, 255, 255, 255) >>> new_color.isValid() True
Commenti recenti