2012-01-03 905 views
5

在我的PyQt4程序中,我通過QColorDialog從用戶檢索QColor。
然後我需要格式化該的QColor的樣式表,這是我目前通過調用實現使用...Qt - 要在樣式表中使用QColor的格式?

QColor.name() 

...返回像「#00FF00」隨後將接受簡單的字符串操作被設置爲一個窗口小部件的樣式表。例如:

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

在程序之後,微件的背景顏色將會被獲取(使用.styleSheet()和更簡單的字符串操作),並轉換爲字符串,當EVAL()的,將構建同色的QColor。

它必須轉換爲QColor,因爲它後來在QBrush中使用。 QColor必須轉換爲單行字符串,因爲它被寫入文件,並通過eval()從所述文件導入。
(eval()ed 必須將顏色傳遞給QColor構造函數,因爲字符串只有一行)。

最後,我需要(這種方式雖然是不可能的)這樣的類似的東西:

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

Ofcourse,這方法行不通,因爲構造的QColor不接受這樣的格式爲「 #00ff00',這是QColorDialog.name()給出的格式和QWidget.setStyleSheet()接受的格式。

我該如何實現這個目標?

有沒有辦法將'#00ff00'這樣的字符串轉換爲3個整數,代表紅色,綠色和藍色,然後可以發送給QColor構造函數?
謝謝!我知道這種格式'#00ff00'確實涉及這三種顏色的表示,但我不明白'ff'是什麼意思,並且對QColor調用.red()並不會返回'#00ff00'格式建議的整數。
這可能很明顯,我不明白顏色:)

規格:
- PyQt4的
- Python的2。7
- Windows 7的

+0

感謝,修正 – 2012-01-03 12:41:47

回答

3

嘗試QColor.setNamedColor(name)

例子:

string_with_color = '#00ff00' # gathered somehow 

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

,但我不明白,在十六進制什麼 'FF' 意味着

ff = 255

編輯

由於從註釋中出現,解決辦法是Python的字符串轉換爲QString

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

正如我所說,string_with_color必須傳遞到的QColor的構造,因爲QColor在單行字符串中被eval()編輯。否則我肯定會使用這種方法。不管怎麼說,還是要謝謝你! – 2012-01-03 12:39:01

+1

我使用PySide代替PyQt,'QColor(name)'工作正常,也許你需要將'str'轉換爲QString? 'EvalString =「QtGui.QColor(QString(」+ ColorString +「))」' – reclosedev 2012-01-03 12:57:44

+0

奇妙!你先生是一個巫師。 – 2012-01-03 13:10:39