当我将列表[...,...,...,...]用作函数参数时,QtGui.QColor不起作用

时间:2019-05-21 09:39:25

标签: python pyqt5

我需要PyQt方面的帮助。 我以一个简单的PyQt小部件为例。背景为纯色。但是我不明白为什么我在给它一个颜色参数__init__ (self, color = [100, 150 ,200 ,255])的列表时显示黑色。

但是我希望通过仅将数字列表发送给color参数来使其正确显示颜色。

我正在尝试将此列表转换为字符串,然后将其发送到self.p.setColor()。但这也不起作用。仅显示黑色作为背景。

但是,如果我直接发送QtGui.QColor(150, 200, 100, 255)到color参数,它将起作用。

import sys
import os
from PyQt5 import QtGui
from PyQt5 import QtCore
from PyQt5 import QtWidgets


class ColorBox(QtWidgets.QMainWindow):

    def __init__(self, color = [100, 200, 150, 255]):

        super(ColorBox, self).__init__()

        self.CoCo = ",".join(str(i) for i in color)
        print (self.CoCo)

        self.setFixedSize(200, 200)

        self.setAutoFillBackground(True)
        self.p = self.palette()
        self.p.setColor(self.backgroundRole(), QtGui.QColor(self.CoCo))
        self.setPalette(self.p)
        self.setObjectName("Color_cube")


def main():
    app = QtWidgets.QApplication(sys.argv)
    main = ColorBox()
    main.show()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()

所以这不起作用:

def __init__(self, color = [100, 200, 150, 255]):

但是如果我直接将颜色attr发送到self.p.setColor(),这会很好:

def __init__(self, color = QtGui.QColor(100, 200, 150, 255):

仅通过将数字列表转换为颜色值,我应该怎么做才能使第一个变体起作用?原因我需要将此颜色参数存储在JSON文件中。而且我无法存储整行"QtGui.QColor(100, 200, 150, 255)"

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

那呢?

import sys
import os
from PyQt5 import QtGui
from PyQt5 import QtCore
from PyQt5 import QtWidgets


class ColorBox(QtWidgets.QMainWindow):

    def __init__(self, color = [100, 200, 150, 255]):

        super(ColorBox, self).__init__()

        if isinstance(color, (list, tuple) ):
            myColor = QtGui.QColor( *color )
        elif isinstance( color, QtGui.QColor ):
            myColor = color
        else:
            raise TypeError

        self.setFixedSize(200, 200)

        self.setAutoFillBackground(True)
        self.p = self.palette()
        self.p.setColor(self.backgroundRole(), myColor )
        self.setPalette(self.p)
        self.setObjectName("Color_cube")


def main():
    app = QtWidgets.QApplication(sys.argv)
    ###all three work
    # ~ main = ColorBox()
    # ~ main = ColorBox( (30,0,180,250) )
    main = ColorBox( QtGui.QColor( 250, 0, 180, 250 ) )
    main.show()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()

对于listtuple,您可以通过解包在本地创建QColor。如果已经是QColor,则将其保留。