Применение таблицы стилей к продвигаемому виджету - PullRequest
1 голос
/ 11 июня 2019

После продвижения моего виджета, например, ответа в этой SO Link подсказке, у меня возникли проблемы с применением моей таблицы стилей к этому конкретному виджету. Пожалуйста, используйте ответ, предоставленный @eyllanesc в качестве рабочего кода.

Я читал похожие проблемы, и некоторые из них предлагают решить эту проблему в paintEvent?

Я пытался применить эту таблицу стилей как в классе Mainform, так и в классе UiLoader, а также переключить widget.setStyleSheet с self.setStyleSheet и поместить его в paintEvent. Я также пробовал без точки до QWidget и переключения QWidget с QObject. Кажется, ни одна из этих попыток не сработала.

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

Таблица стилей работает в Designer, но таблица стилей не применяется, когда я запускаю программу.

1 Ответ

1 голос
/ 11 июня 2019

Если вы хотите, чтобы виджет поддерживал 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);
    }
"""
)

# ...

enter image description here

...