为自定义QWidget设置背景颜色

rmasp98

我正在尝试创建一个自定义QWidget(来自PyQt5),其背景颜色可以更改。但是,设置背景色的所有标准方法似乎不适用于自定义QWidget类

到目前为止,我已经尝试通过QSS样式表和设置调色板来更改颜色。这适用于常规QWidget,但由于某种原因不适用于自定义部件。

我在C ++文档https://wiki.qt.io/How_to_Change_the_Background_Color_of_QWidget中找到了需要paintEvent()函数的参考自定义QWidget ,并在Python中找到了对其的一个参考。但是,由于QStyleOption在PyQt5中似乎不存在,因此实现链接的paintevent失败。

下面显示了我创建的QWidget类的高层(它也包含一堆标签)和我用于Widget的QSS(样式已在父窗口小部件中设置,但尝试直接设置它)

class AlarmWidget(QWidget):
    def __init__(self, alarm, parent=None):
        super(AlarmWidget, self).__init__(parent)
        self.setFixedHeight(200)
        self.setProperty("active", True)

        self.setAutoFillBackground(True)
        p = self.palette()
        p.setColor(self.backgroundRole(), PyQt5.QtCore.Qt.red)
        self.setPalette(p)
AlarmWidget {
  background-color: red
}

总体而言,无论我做什么,它都不允许我为自定义QWidget设置背景颜色,因此,我们将不胜感激

ekhumoro

最简单的解决方法是:

class AlarmWidget(QWidget):
    def __init__(self, alarm, parent=None):
    ...
    self.setAttribute(QtCore.Qt.WA_StyledBackground, True)
    self.setStyleSheet('background-color: red')

只要将样式表应用于自定义小部件或其祖先小部件之一,就会发生此问题引用QWidget.setPalette文档:

警告:请勿将此功能与Qt样式表一起使用使用样式表时,可以使用“颜色”,“背景颜色”,“选择颜色”,“选择背景颜色”和“替代背景颜色”来自定义窗口小部件的调色板。

但是,由于性能原因,自定义窗口小部件默认禁用了样式表支持,因此没有提及。因此,为了使示例正常工作,您必须(1)通过样式表设置背景色,并且(2)使用WA_StyledBackground小部件属性显式启用样式表支持

一个最小的示例演示如下:

import sys
from PyQt5 import QtCore, QtWidgets

class AlarmWidget(QtWidgets.QWidget):
    def __init__(self, alarm, parent=None):
        super(AlarmWidget, self).__init__(parent)
        self.setFixedHeight(200)
#         self.setAutoFillBackground(True)
#         p = self.palette()
#         p.setColor(self.backgroundRole(), QtCore.Qt.red)
#         self.setPalette(p)
        self.setAttribute(QtCore.Qt.WA_StyledBackground, True)
        self.setStyleSheet('background-color: red')

class Window(QtWidgets.QWidget):
    def __init__(self):
        super(Window, self).__init__()
        self.setStyleSheet('background-color: green')
        self.widget = AlarmWidget('')
        layout = QtWidgets.QVBoxLayout(self)
        layout.addWidget(self.widget)

if __name__ == '__main__':

    app = QtWidgets.QApplication(sys.argv)
    window = Window()
    window.setWindowTitle('BG Colour Test')
    window.setGeometry(600, 100, 300, 200)
    window.show()
    sys.exit(app.exec_())

这应该显示一个包含带有绿色边框的红色矩形的窗口,如下所示:

屏幕截图

为了进一步测试,只需在AlarmWidget类中设置调色板,而无需在Window类中设置样式表这应该显示一个没有绿色边框的红色矩形。最后,仅在两个设置样式表-而不是setAttribute一行。这应该显示没有内部红色矩形的纯绿色矩形(即,不再应用自定义小部件上的样式表)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在Apache POI中为XSSFWorkbook设置自定义字体颜色

自定义形状后面的颜色已填充,我想将其设置为白色

为自定义UIView设置背景图片

将地图标记设置为自定义颜色的Android

TabLayout:为每个标签设置自定义颜色

为UIColor创建自定义颜色

无法为导航栏项iOS Swift设置自定义颜色

如何在react-navigation中将背景图像设置为自定义DrawerNavigator

如何设置自定义窗口小部件的背景颜色和边框宽度?

将自定义chipDrawable背景设置为Chip

在Bootstrap 4中使用bg- class设置自定义导航栏背景颜色

AMCharts 4:尝试为图表设置自定义颜色

自定义selectInput的背景颜色

如何在altair中将自定义颜色主题设置为默认值?

自定义QWidget中的背景颜色错误

在Windows 8.1中设置自定义Windows背景颜色不起作用

如何在VS 2013中为HTML尖括号设置自定义颜色?

无法设置ActionBar的自定义背景颜色

如何在LibreOffice Impress中为幻灯片定义自定义颜色背景?

如何在对话框中将自定义颜色设置为getWindows

在PhpStorm中设置自定义颜色

如何在代码后面将自定义背景设置为ListView项目颜色?

如何在视图控制器的背景中设置自定义颜色

设置背景自定义颜色,XSSFWorkbook

为 HTML 颜色输入设置自定义图标

如何在 Flutter 中为自定义画家的颜色设置动画?

toast.view.background 为空时如何自定义 Toast 背景颜色?

如何在flutter中为自定义背景颜色创建全局类

Obj-C - 使用自定义 int 值以编程方式设置 imageview 背景颜色?