2012-01-03 15 views
5

Nel mio programma PyQt4, richiamo QColor dall'utente tramite QColorDialog.
Ho quindi bisogno di formattare questa QColor per essere utilizzato in un foglio di stile, che ho attualmente a raggiungere chiamando ...Qt - Formato Q Colore da utilizzare nel foglio di stile?

QColor.name() 

... che restituisce qualcosa come '# 00FF00' che sarebbe poi sottoposti a semplice stringa manipolazione da impostare come foglio di stile per un widget. ad esempio:

QWidget.setStyleSheet('* { background-color: '+ QColor.name() + ' }') 

più avanti nel programma, il colore di sfondo del widget deve essere recuperato (usando .styleSheet() e più semplice manipolazione di stringhe) e convertito in una stringa che quando eval() ed, sarebbe costruire un Q Colore del colore identico.

Deve essere convertito in QColor, poiché viene successivamente utilizzato in un QBrush. QColor deve essere convertito in una stringa di linea perché è scritta nel file e importata da detto file tramite eval().
(La stringa quando eval() ed deve passare il colore al costruttore QColor, poiché la stringa è solo una riga).

Alla fine, ho bisogno di qualcosa simile (anche se non è possibile in questo modo) come questo:

ColorString = str(QtGui.QColorDialog.getColor().name()) 
EvalString = "QtGui.QColor(" + ColorString +")" 

Naturalmente, questo metodo non funziona perché il costruttore QColor non accetta un tale formato ' # 00ff00 'che è il formato fornito da QColorDialog.name() e accettato da QWidget.setStyleSheet().

Come posso effettivamente raggiungere questo?

Esiste comunque una conversione di stringa come "# 00ff00" in 3 numeri interi che rappresentano Rosso, Verde e Blu che potrebbero quindi essere inviati al costruttore QColor?
Grazie!

Nota:
Mi rendo conto che un tale formato '# 00FF00' non comporta una rappresentazione di quei tre colori, ma non capisco che cosa 'FF' mezzi, e chiamando .red() su un QColor non lo fa restituisce il numero intero suggerito dal formato '# 00ff00'.
è probabilmente ovvio che io non capisco i colori :)

Spec:
- PyQt4
- Python 2.7
- Windows 7

+0

grazie, modificato –

risposta

3

Prova QColor.setNamedColor(name)

Esempio:

string_with_color = '#00ff00' # gathered somehow 

color = QtGui.QColor(0, 0, 0) 
color.setNamedColor(string_with_color) 

ma non capisco che cosa 'FF' significa

ff = 255 nel sistema esadecimale

EDIT

Come risulta dai commenti, soluzione era quella di convertire la stringa Python per QString

EvalString = "QtGui.QColor(QtCore.QString(" + ColorString +"))" 
+0

Come ho detto, lo string_with_color deve essere passato al costruttore del QColor, dal momento che il QColor è in una stringa single-lined per essere eval() ed. Avrei certamente usato questo metodo altrimenti. Grazie comunque! –

+1

Sto usando PySide invece PyQt e 'QColor (name)' funziona bene, forse è necessario convertire 'str' in QString? 'EvalString =" QtGui.QColor (QString ("+ ColorString +")) "' – reclosedev

+0

Meraviglioso! Tu signore sei un mago. –

Problemi correlati