Есть ли какая-нибудь альтернатива свойству CSS box-shadow в PyQT5?

Подскажите как сделать тень у кнопки на PyQt5.

CSS-свойство box-shadow позволяет добавлять элементу одну или несколько теней, указывая их параметры через запятую. Свойство тени представляет собой описанные смещения по x и y от элемента, радиус размытия и его радиус, а также цвет.


Ответы (1 шт):

Автор решения: S. Nick

Qt StyleSheet - это не CSS, но это технология, реализующая некоторые функции, среди которых нет box-shadow.

Если вы хотите реализовать что-то подобное, вам следует использовать QGraphicsDropShadowEffect.

Класс QGraphicsDropShadowEffect обеспечивает эффект тени.
Больше https://doc.qt.io/qt-5/qgraphicsdropshadoweffect.html

import sys
from PyQt5.Qt import *


class MainWindow(QWidget):
    def __init__(self):
        super().__init__()

        self.btn = QPushButton("Button")
        self.combo = QComboBox()

        layout = QHBoxLayout(self)
        layout.addWidget(self.btn)
        layout.addWidget(self.combo)

        for children in self.findChildren(QWidget):
            shadow = QGraphicsDropShadowEffect(blurRadius=5, xOffset=3, yOffset=3)
            children.setGraphicsEffect(shadow)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = MainWindow()
    w.show()
    sys.exit(app.exec_())

введите сюда описание изображения


Update

А подскажите как применить только к одному элементу QPushButton?

import sys
from PyQt5.Qt import *


class MainWindow(QWidget):
    def __init__(self):
        super().__init__()

        self.btn = QPushButton("Button")
        self.combo = QComboBox()

        layout = QHBoxLayout(self)
        layout.addWidget(self.btn)
        layout.addWidget(self.combo)

#        for children in self.findChildren(QWidget):
#            shadow = QGraphicsDropShadowEffect(blurRadius=5, xOffset=3, yOffset=3)
#            children.setGraphicsEffect(shadow)

        shadow = QGraphicsDropShadowEffect(blurRadius=5, xOffset=3, yOffset=3)
        self.btn.setGraphicsEffect(shadow)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = MainWindow()
    w.show()
    sys.exit(app.exec_())

введите сюда описание изображения

→ Ссылка