QtGui.QColor颜色当我给它一个列表[…,…,…,…]作为函数argumen时,它不起作用

2024-03-28 13:24:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要帮助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]):

但是如果我直接将color attr发送给self.p.setColor(),这个方法就可以了:

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

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

非常感谢你的帮助!你知道吗


Tags: fromimportself列表参数init颜色main
1条回答
网友
1楼 · 发布于 2024-03-28 13:24:13

这个怎么样?你知道吗

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,你就离开它。你知道吗

相关问题 更多 >