Удалить отбрасываемую тень в leaveEvent

#python #pyqt #pyqt5

#python #pyqt #pyqt5

Вопрос:

Я хочу удалить эффект тени в leaveEvent. Вот мой код:

 class GroupBox(QGroupBox):
    def __init__(self, parent=None, shadow=True):
        super(GroupBox, self).__init__(parent)
        self.isShadow = shadow

        if self.isShadow == True:
            self.shadow = QGraphicsDropShadowEffect()
        elif self.isShadow == False:
            self.shadow = None

       

    def enterEvent(self, event):
        if self.shadow != None:  
            self.shadow.setBlurRadius(10)
            self.shadow.setOffset(0, 0) 
            self.setGraphicsEffect(self.shadow)


    def leaveEvent(self, event):
        self.shadow = None
  

Любые предложения о том, как это исправить?

Ответ №1:

Если вы хотите удалить QGraphicsEffect, вы должны передать None методу setGraphicsEffect, но побочным эффектом является то, что QGraphicsEffect будет удален, поэтому вам придется заново создать QGraphicsEffect:

 class GroupBox(QGroupBox):
    def __init__(self, parent=None, shadow=True):
        super(GroupBox, self).__init__(parent)
        self._is_shadow = shadow

    @property
    def is_shadow(self):
        return self._is_shadow

    def enterEvent(self, event):
        if self.is_shadow:
            shadow_effect = QGraphicsDropShadowEffect(
                blurRadius=10, offset=QPointF(0, 0)
            )
            self.setGraphicsEffect(shadow_effect)

    def leaveEvent(self, event):
        if self.is_shadow:
            self.setGraphicsEffect(None)