Создаю программу с кастомным окном. То есть я создал свой собственный тайтл бар и кнопки и удалил при этом стандартный от windows.
Теперь я хочу добавить к своей программе тень вокруг всего окна. Насколько я понял, делается это с помощью
setGraphicsEffect. Но у меня почему то не работает. Ошибок не выдаёт, просто не работает, не могу понять в чём проблема.
Вот тут видно то, к чему я стремлюсь и то, что у меня сейчас
### ФАЙЛ: 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, но это не дало результата