Précédent   Forum du club des développeurs et IT Pro > Autres langages > Python & Zope > GUI > PySide et PyQt
PySide et PyQt Forum d'entraide sur PySide et PyQt
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 25/12/2012, 22h31   #1
atkers
Invité de passage
 
Inscription : 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 !
atkers est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/12/2012, 06h45   #2
tyrtamos
Expert Confirmé
 
Avatar de tyrtamos
 
Inscription : décembre 2007
Messages : 1 773
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : décembre 2007
Messages : 1 773
Points : 3 042
Points : 3 042
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
tyrtamos est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 11h09.


 
 
 
 
Partenaires

Hébergement Web