Тень дизайнерского виджета?

#python #pyqt5 #qt-designer #qtstylesheets

Вопрос:

Я добавил виджет в свои главные окна, и я хотел бы показать ему что-то вроде box-shadow: 3px 3px 25px #111;

Я попробовал выше, перейдя в change stylesheet опцию виджета и добавив код, как показано ниже:

 background-color:#fff;
border:4px solid blue;
box-shadow: 0px -3px 5px #a6a6a6;
 

Первые два атрибута дают ожидаемый эффект, но бокс-тень не работает.

Как использовать Python QT Designer и добавить тень коробки в виджет?

Ответ №1:

Таблица стилей Qt не является CSS, но это технология, которая реализует некоторые функции, и среди них нет тени коробки. Если вы хотите реализовать что-то подобное, вам следует использовать QGraphicsDropShadowEffect:

 import sys

from PyQt5.QtCore import QPoint, Qt
from PyQt5.QtGui import QColor
from PyQt5.QtWidgets import (
    QApplication,
    QGraphicsDropShadowEffect,
    QMainWindow,
    QVBoxLayout,
    QWidget,
)


def main():
    app = QApplication(sys.argv)

    main_window = QMainWindow()

    container = QWidget()
    container.setContentsMargins(3, 3, 3, 3)
    main_window.setCentralWidget(container)

    widget = QWidget()
    widget.setAutoFillBackground(True)

    lay = QVBoxLayout(container)
    lay.addWidget(widget)

    effect = QGraphicsDropShadowEffect(
        offset=QPoint(3, 3), blurRadius=25, color=QColor("#111")
    )
    widget.setGraphicsEffect(effect)

    main_window.resize(640, 480)
    main_window.show()

    sys.exit(app.exec_())


if __name__ == "__main__":
    main()
 

Рекомендуется ознакомиться со ссылками на таблицы стилей Qt: