2012-01-03 900 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