Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 2 sur 2
  1. #1
    Invité de passage
    Inscrit en
    décembre 2012
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : décembre 2012
    Messages : 6
    Points : 2
    Points
    2

    Par défaut Comment utiliser QGraphicsDropShadowEffect sur un QLabel ?

    Bonsoir,

    J'essaie d'appliquer l'effet d'ombre (QGraphicsDropShadowEffect) sur un QLabel pourtant cela ne marche pas !

    Voilà un des methodes que j'ai déjà essaié:

    Code :
    1
    2
    3
    self.shadow = QGraphicsDropShadowEffect(self)
    self.shadow.setBlurRadius(5) # pas forcement necessaire, apparemment 
    self.my_qlabel.setGraphicsEffect(self.shadow)
    Au fait, ce que j'ai besoin n'est pas si complique donc je pourrais simplement créer un second label pour donner quelque sort d'effet mais j'aimerais bien apprendre pourquoi ça ne marche pas.

    Je vous remercie encore et encore !

  2. #2
    Expert Confirmé Sénior
    Avatar de tyrtamos
    Profil pro
    Inscrit en
    décembre 2007
    Messages
    2 314
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : décembre 2007
    Messages : 2 314
    Points : 4 172
    Points
    4 172
    Billets dans le blog
    1

    Par défaut

    Bonjour,

    Voilà un petit exemple:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    from __future__ import division
    # python 2.7
     
    import sys, os
    from PyQt4 import QtCore, QtGui
     
    #############################################################################
    class Fenetre(QtGui.QWidget):
     
            def __init__(self, parent=None):
            super(Fenetre,self).__init__(parent)
            self.resize(400, 300)
     
            self.label = QtGui.QLabel(u"C'est un QLabel!!!", self)
            self.label.setStyleSheet(u"background-color:yellow") 
            ombre = QtGui.QGraphicsDropShadowEffect(self)
            ombre.setBlurRadius(10) # defaut: 1
            ombre.setColor(QtGui.QColor(100,100,100, 180)) #defaut: QtGui.QColor(63, 63, 63, 180)
            ombre.setOffset(4, 4) # defaut: 8,8
            self.label.setGraphicsEffect(ombre)
     
            posit = QtGui.QGridLayout()
            posit.addWidget(self.label, 0, 0)
            posit.setAlignment(self.label, QtCore.Qt.AlignCenter)
            self.setLayout(posit)
     
    #############################################################################
    if __name__ == "__main__":
        app = QtGui.QApplication(sys.argv)
        fen = Fenetre()
        fen.show()
        sys.exit(app.exec_())
    On peut configurer l'ombre:
    - setBlurRadius donne le flou (défaut=1).
    - setColor donne la couleur (défaut=63,63,63,180 => gris avec transparence).
    - setOffset donne le décalage de l'ombre (défaut=8,8)

    A tester pour obtenir l'effet voulu!

    Par ailleurs, il y a un exemple intéressant ici: http://stackoverflow.com/questions/1...16704#14016704: l'ombre n'est plus sous le QLabel mais sous le texte lui-même!

    [Edit] Et c'est encore plus joli avec non pas un texte dans un label, mais une image dans un label. Voilà un petit exemple: il suffit de mettre une image jpg (elle sera redimensionnée).

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    from __future__ import division
    # python 2.7
     
    import sys, os
    from PyQt4 import QtCore, QtGui
     
    #############################################################################
    class Fenetre(QtGui.QWidget):
     
        def __init__(self, parent=None):
            super(Fenetre,self).__init__(parent)
            self.resize(400, 300)
     
            self.label = QtGui.QLabel(self)
            image = QtGui.QPixmap(u"monimage.jpg")
            image = image.scaledToWidth(200, QtCore.Qt.SmoothTransformation)
            self.label.setPixmap(image)
     
            ombre = QtGui.QGraphicsDropShadowEffect(self)
            ombre.setBlurRadius(20) # defaut: 1
            ombre.setColor(QtGui.QColor(63,63,63, 180)) #defaut: QtGui.QColor(63, 63, 63, 180)
            ombre.setOffset(8, 8) # defaut: 8,8
            self.label.setGraphicsEffect(ombre)
     
            posit = QtGui.QGridLayout()
            posit.addWidget(self.label, 0, 0)
            posit.setAlignment(self.label, QtCore.Qt.AlignCenter)
            self.setLayout(posit)
     
    #############################################################################
    if __name__ == "__main__":
        app = QtGui.QApplication(sys.argv)
        fen = Fenetre()
        fen.show()
        sys.exit(app.exec_())
    [Edit2] Je n'ai pas pu résister: voilà l'exemple de l'ombre derrière un texte! J'ai exploité le lien donné ci-dessus.

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    from __future__ import division
    # python 2.7
     
    import sys, os
    from PyQt4 import QtCore, QtGui
     
    #############################################################################
    class Fenetre(QtGui.QWidget):
     
        def __init__(self, parent=None):
            super(Fenetre,self).__init__(parent)
            self.resize(400, 300)
     
            self.scene = QtGui.QGraphicsScene(self)
            self.view = QtGui.QGraphicsView(self)
            self.view.setScene(self.scene)
     
            self.text = self.scene.addText("Bonjour!")
            font = QtGui.QFont()
            font.setFamily(u"DejaVu Sans")
            font.setPointSize(20)
            self.text.setFont(font)
     
            ombre = QtGui.QGraphicsDropShadowEffect(self)
            # intensité du flou (defaut: 1)
            ombre.setBlurRadius(10)
            # couleur de l'ombre et niveau de transparence (defaut: QtGui.QColor(63, 63, 63, 180))
            ombre.setColor(QtGui.QColor(63,63,63, 180))
            # décalage de l'ombre (defaut: 8,8)
            ombre.setOffset(4, 4)
     
            self.text.setGraphicsEffect(ombre)
     
            posit = QtGui.QGridLayout()
            posit.addWidget(self.view, 0, 0)
            #posit.setAlignment(self.view, QtCore.Qt.AlignCenter)
            self.setLayout(posit)
     
    #############################################################################
    if __name__ == "__main__":
        app = QtGui.QApplication(sys.argv)
        fen = Fenetre()
        fen.show()
        sys.exit(app.exec_())
    C'est chouette, non?
    Ne rien ranger permet d'observer la loi universelle d'entropie: l'inévitable convergence vers le chaos...
    Mes recettes python: http://www.jpvweb.com

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •