gpt4 book ai didi

python - 在运行时修改小部件颜色而不覆盖样式表

转载 作者:太空狗 更新时间:2023-10-30 00:55:33 24 4
gpt4 key购买 nike

我的情况:我有一个带有样式表集的小部件。该样式表可能包含也可能不包含颜色设置。我想更改小部件的颜色,但我不能只执行 widget.setStyleSheet("QWidget {background-color: %s}"% colour),因为它会替换现有的样式表,我不想这样做。

我的问题:在不删除小部件样式表的情况下更改小部件(在我的例子中为背景)颜色的正确方法是什么?有没有比解析和附加到样式表更好的方法?

示例:

在下面的代码中,如何更改box的颜色(假设盒子的颜色必须动态变化;例如,当盒子包含偶数个项目时,盒子是红色的,而绿色当数字是奇数时)?

import sys
from PySide import QtGui, QtCore

class Example(QtGui.QWidget):

def __init__(self):
super(Example, self).__init__()

self.initUI()

def initUI(self):
box = QtGui.QComboBox(self)
box.resize(box.sizeHint())
box.setStyleSheet("""
QComboBox::drop-down {border-width: 0px;}
QComboBox::down-arrow {image: url(noimg); border-width: 0px;}
""")
box.move(50, 50)

#Using the palette doesn't work:
pal = box.palette()
pal.setColor(box.backgroundRole(), QtCore.Qt.red)
box.setAutoFillBackground(True)
box.setPalette(pal)

self.setGeometry(300, 300, 250, 150)
self.show()


if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())

使用盒子的托盘不起作用,大概是根据 this warning on the autoFillBackground method :

Warning: Use this property with caution in conjunction with Qt Style Sheets. When a widget has a style sheet with a valid background or a border-image, this property is automatically disabled.

最佳答案

您可以使用动态属性来做到这一点:

from PySide import QtCore, QtGui

class Window(QtGui.QWidget):
def __init__(self):
QtGui.QWidget.__init__(self)
self.edit = QtGui.QLineEdit(self)
self.edit.setProperty('warning', False)
self.edit.setStyleSheet("""
/* other rules go here */
QLineEdit[warning="true"] {background-color: yellow};
QLineEdit[warning="false"] {background-color: palette(base)};
""")
self.button = QtGui.QPushButton('Test', self)
self.button.clicked.connect(self.handleButton)
layout = QtGui.QVBoxLayout(self)
layout.addWidget(self.edit)
layout.addWidget(self.button)

def handleButton(self):
self.edit.setProperty(
'warning', not self.edit.property('warning'))
self.edit.style().unpolish(self.edit)
self.edit.style().polish(self.edit)

if __name__ == '__main__':

import sys
app = QtGui.QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())

关于python - 在运行时修改小部件颜色而不覆盖样式表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27159575/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com