我需要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)"
非常感谢您的帮助!
答案 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()
对于list
或tuple
,您可以通过解包在本地创建QColor
。如果已经是QColor
,则将其保留。