p
u
b
l
i
c
i
t
é
publicité
  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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 671
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : décembre 2007
    Messages : 2 671
    Points : 4 958
    Points
    4 958
    Billets dans le blog
    6

    Par défaut

    Bonjour,

    Voilà un petit exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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?
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

Discussions similaires

  1. Comment utiliser usemap sur une image png transparente
    Par master_kb2 dans le forum JavaScript
    Réponses: 1
    Dernier message: 03/01/2008, 14h00
  2. Réponses: 1
    Dernier message: 27/03/2007, 14h07
  3. [VS2005][NUnit] Comment utiliser Nunit sur un site web
    Par Dadou74 dans le forum Visual Studio
    Réponses: 1
    Dernier message: 31/08/2006, 09h53
  4. Réponses: 7
    Dernier message: 18/04/2006, 17h44
  5. Réponses: 10
    Dernier message: 10/04/2006, 13h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo