首页 > 解决方案 > 将样式表应用于提升的小部件

问题描述

在像这个SO Link中的答案一样推广我的小部件后,建议我在这个特定的小部件上应用我的样式表时遇到问题。请使用@eyllanesc 提供的答案作为工作代码。

我读过类似的问题,其中一些建议在paintEvent中处理这个问题?

我尝试在 Mainform 类和 UiLoader 类中应用此样式表,并使用 self.setStyleSheet 切换 widget.setStyleSheet 并将其放入paintEvent。我也尝试过在 QWidget 之前不使用点并用 QObject 切换 QWidget。这些尝试似乎都不起作用。

widget.setStyleSheet("""
    .QWidget{
        border: 1px solid grey;
        border-radius: 2px;
        background-color: rgb(255, 255, 255);
        }
    """)

样式表在 Designer 中工作,但在我运行程序时未应用样式表。

标签: pythonpython-3.xqt-designerqtstylesheetspyside2

解决方案


如果您希望小部件支持 QSS,则必须使用 QStyle 进行绘画,因为它在内部使用 QSS:

class Drawer(QtWidgets.QWidget):
    def paintEvent(self, event):
        opt = QtWidgets.QStyleOption()
        opt.init(self)
        qp = QtGui.QPainter(self)
        self.style().drawPrimitive(QtWidgets.QStyle.PE_Widget, opt, qp, self)
        self.drawGeometry(qp)
        qp.end()

    def drawGeometry(self, qp):
        qp.setPen(QtGui.QPen(QtCore.Qt.green, 8, QtCore.Qt.DashLine))
        qp.drawEllipse(40, 40, 400, 400)

您还必须使用以下 QSS:

# ...
loader = UiLoader()
self.ui_window = loader.load(ui_file)
ui_file.close()
self.ui_window.show()
self.ui_window.widget.setStyleSheet(
    """
    QWidget{
        border: 1px solid grey;
        border-radius: 2px;
        background-color: rgb(255, 255, 255);
    }
"""
)

# ...

在此处输入图像描述


推荐阅读