Почему не работает setGraphicsEffect в PyQt5?

Создаю программу с кастомным окном. То есть я создал свой собственный тайтл бар и кнопки и удалил при этом стандартный от windows.

Теперь я хочу добавить к своей программе тень вокруг всего окна. Насколько я понял, делается это с помощью setGraphicsEffect. Но у меня почему то не работает. Ошибок не выдаёт, просто не работает, не могу понять в чём проблема.

Вот тут видно то, к чему я стремлюсь и то, что у меня сейчас
6665eb191b279189648026.png

### ФАЙЛ: ui_main.py

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtGui import QColor
from PyQt5.QtWidgets import QGraphicsDropShadowEffect

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(877, 617)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        font = QtGui.QFont()
        font.setFamily("Open Sans")
        font.setPointSize(10)
        self.centralwidget.setFont(font)
        self.centralwidget.setObjectName("centralwidget")
        self.main_frame_layout = QtWidgets.QVBoxLayout(self.centralwidget)
        self.main_frame_layout.setContentsMargins(0, 0, 0, 0)
        self.main_frame_layout.setSpacing(0)
        self.main_frame_layout.setObjectName("main_frame_layout")
        self.main_frame = QtWidgets.QFrame(self.centralwidget)
        self.main_frame.setFrameShape(QtWidgets.QFrame.NoFrame)
        self.main_frame.setFrameShadow(QtWidgets.QFrame.Raised)
        self.main_frame.setObjectName("main_frame")
        self.main_frame_inside_layot = QtWidgets.QVBoxLayout(self.main_frame)
        self.main_frame_inside_layot.setContentsMargins(0, 0, 0, 0)
        self.main_frame_inside_layot.setSpacing(0)
        self.main_frame_inside_layot.setObjectName("main_frame_inside_layot")
    
    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.label_title_text.setText(_translate("MainWindow", "Obrab Notes"))
        self.btn_file.setText(_translate("MainWindow", "File"))
        self.btn_settings.setText(_translate("MainWindow", "Settings"))
        self.btn_add.setText(_translate("MainWindow", "Add"))


### ФАЙЛ: ui_functions.py

from PyQt5.QtWidgets import QGraphicsDropShadowEffect
from PyQt5.QtGui import QColor

from main import *
from main import MainWindow

class UIFunctions (MainWindow):
    def uiDefinitions(self):
        ############################################
        # REMOVE TITLE BAR #### удалил тайтл #######
        self.setWindowFlag(QtCore.Qt.FramelessWindowHint)
        self.setAttribute(QtCore.Qt.WA_TranslucentBackground)


        # SET DROPSHADOW WINDOW # <--- НЕ работает
        self.shadow = QGraphicsDropShadowEffect(self)
        self.shadow.setBlurRadius(20)
        self.shadow.setXOffset(0)
        self.shadow.setYOffset(0)
        self.shadow.setColor(QColor(0, 0, 0, 100))

        # APPLY DROPSHADOW TO FRAME # <--- НЕ работает
        self.ui.main_frame.setGraphicsEffect(self.shadow)


        # MAXIMIZE / RESTORE 
        self.ui.btn_maximize.clicked.connect(lambda: UIFunctions.maximize_restore(self))

        # MINIMIZE
        self.ui.btn_minimize.clicked.connect(lambda: self.showMinimized())

        # CLOSE
        self.ui.btn_close.clicked.connect(lambda: self.close())


### ФАЙЛ: main.py

import sys
import platform

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import Qt, QEvent
from PyQt5.QtWidgets import QMainWindow, QApplication, QGraphicsDropShadowEffect
from PyQt5.QtGui import QColor

# GUI FILE
from ui_main import Ui_MainWindow

# IMPORT FUNCTIONS
from ui_functions import *

class MainWindow(QMainWindow):
    def __init__(self):
        QMainWindow.__init__(self)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        ## ==> SET UI DEFINITIONS
        UIFunctions.uiDefinitions(self)

        ## SHOW ==> MAIN WINDOW
        ########################################################################
        self.show()

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    sys.exit(app.exec_())


Также я пробовал устанавливать setGraphicsEffect в самом ui_main.py, но это не дало результата
  • Вопрос задан
  • 29 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы