Home > PyQt5, python > PyQt5: QColor

PyQt5: QColor

5 Giugno 2019

Torna all’indice degli appunti

QColor

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

Torna all’indice degli appunti

Categorie:PyQt5, python Tag: ,
I commenti sono chiusi.