【问题标题】:Qt - Format QColor to be used in Style Sheet?Qt - 格式 QColor 用于样式表?
【发布时间】:2012-02-01 11:09:43
【问题描述】:

在我的 PyQt4 程序中,我通过 QColorDialog 从用户那里检索 QColor。
然后我需要格式化这个 QColor 以在样式表中使用,我目前通过调用...

QColor.name()

... 返回类似 '#00ff00' 的内容,然后将进行简单的字符串操作以设置为小部件的样式表。例如:

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

稍后在程序中,必须获取小部件的背景颜色(使用 .styleSheet() 和更简单的字符串操作)并转换为字符串,当 eval() 执行时,该字符串将构造相同颜色的 QColor。

它必须转换为 QColor,因为它稍后会在 QBrush 中使用。 QColor 必须转换为单行字符串,因为它被写入文件,并通过 eval() 从所述文件导入。
(eval() 时的字符串必须将颜色传递给 QColor 构造函数,因为字符串只有一行)。

最后,我需要类似的东西(虽然不可能以这种方式):

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

当然,这个方法不起作用,因为 QColor 构造函数不接受像“#00ff00”这样的格式,这是 QColorDialog.name() 给出的格式,而 QWidget.setStyleSheet() 接受的格式。

我怎样才能真正做到这一点?

有没有办法将像 '#00ff00' 这样的字符串转换为 3 个表示红色、绿色和蓝色的整数,然后将其发送到 QColor 构造函数?
谢谢!

注意:
我意识到这种格式 '#00ff00' 确实涉及这三种颜色的表示,但我不明白 'ff' 的含义,并且在 QColor 上调用 .red() 不会返回由'#00ff00' 格式。
很明显我不懂颜色:)

规格:
- PyQt4
- Python 2.7
- 视窗 7

【问题讨论】:

    标签: python qt colors stylesheet


    【解决方案1】:

    试试QColor.setNamedColor(name)

    例子:

    string_with_color = '#00ff00'  # gathered somehow
    
    color = QtGui.QColor(0, 0, 0)
    color.setNamedColor(string_with_color)
    

    但我不明白'ff'是什么意思

    ff = 255(十六进制)

    编辑

    从 cmets 看来,解决方案是将 Python 字符串转换为 QString

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

    【讨论】:

    • 正如我所说,string_with_color 必须传递给 QColor 的构造函数,因为 QColor 是在单行字符串中进行 eval() 处理的。否则我肯定会自己使用这种方法。还是谢谢!
    • 我使用的是 PySide 而不是 PyQt,QColor(name) 工作正常,也许您需要将 str 转换为 QString? EvalString = "QtGui.QColor(QString(" + ColorString +"))"
    • 太棒了!你先生是个巫师。
    猜你喜欢
    • 2019-09-13
    • 1970-01-01
    • 1970-01-01
    • 2011-05-25
    • 2011-11-02
    • 2017-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多