IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PyQt Python Discussion :

QItemDelegate : couleur d'arrière-plan


Sujet :

PyQt Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 9
    Par défaut QItemDelegate : couleur d'arrière-plan
    Bonjour,

    Je reviens de réaliser une application, utilisant un QTreeView. Pour gérer le couleur de l'arrière plan, j'utilise un QItemDelegate, mais je n'arrive pas à le comprendre.

    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
    class ColorDelegate(QItemDelegate):
        def __init__(self, parent=None, *args):
            QItemDelegate.__init__(self, parent, *args)
     
        def paint(self, painter, option, index):
     
            painter.save()
            value = index.data(Qt.DisplayRole)
            if value.isValid():   
                painter.setBrush(QBrush(Qt.red))
                painter.drawRect(option.rect)                    
     
            painter.setPen(QPen(Qt.black))
            value = index.data(Qt.DisplayRole)
            if value.isValid():
                text = value.toString()
                painter.drawText(option.rect, Qt.AlignLeft, text)
     
            painter.restore()
    Le comportement que je souhaite, c'est lorsque la valeur est un flottant et supérieur à un certain seuil, la couleur de l’arrière plan devienne rouge. la fonction isFloat() de Qvariant ne fonctionne pas.

    Pouvez - vous m'aider ?

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 9
    Par défaut
    J'ai réussi à mettre en place que je souhaite, mon code est le suivant :
    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
    class ColorDelegate(QItemDelegate):
        def __init__(self, parent=None, *args):
            QItemDelegate.__init__(self, parent, *args)
     
     
        def paint(self, painter, option, index):
            painter.save()
     
            pen = QPen()
            pen.setBrush(Qt.white);
            painter.setPen(pen)
     
            value = index.data(Qt.DisplayRole)
            if value.isValid():
                text = value.toString()
                try : 
                    f = float(text)
                    if f > 10: 
                        painter.setBrush(QBrush(Qt.red))
     
                except ValueError:
                    pass
            painter.drawRect(option.rect)
     
     
            painter.setPen(QPen(QBrush(QColor(Qt.black)))) 
            value = index.data(Qt.DisplayRole)
            if value.isValid():
                text = value.toString()
                painter.drawText(option.rect, Qt.AlignLeft, text)
     
            painter.restore()
    Comme je l'ai dit dans le message précédent, je n'arrive pas à déterminer de façon rapide, si la valeur de l'index est un flottant ou non.Pourtant, la fonction data() d'un QIndexModel renvoi un QVariant, et cet objet comporte la fonction isFloat(). Pour contourner cela, j'ai mis en place une exception. De plus, je ne comprends pas comment éviter de tracer les bordures des colonnes et des lignes de façon claire dans un QTreeView. Je passe par de nombreuses opération sur les QPen, mais j'aimerai avoir plus de détails dessus.

    Avez - vous déjà eu ce problème sur les QVariant ?

    J'ai de nouveau une question, j'aimerai pouvoir changer la couleur du fond de la case de façon dynamique. J'utilise un QSlider pour modifier la valeur du seuil, qui dans mon code, est égal à 10. Peut-on mettre un signal sur un Delegate pour qu'il puisse se rafraîchir de façon dynamique, en fonction de la valeur du QSlider que l'utilisateur aura choisis.

    J'ai une dernière question, dans la visualisation de l'arbre, j'aimerai modifier la vue mais pas le model. Je m'explique, l'utilisateur pourra fissionner des branches de l'arbre, mais cela sera simplement visuellement et ne sera pas répercuter sur le modèle de donnée.

    Je vous remercie par avance.

    Ma version de Python est 2.6 et ma version de PyQt est 4.4.

Discussions similaires

  1. Réponses: 5
    Dernier message: 09/03/2007, 11h09
  2. [TABLE] Couleurs d'arrière-plan des TR alternées
    Par arkienou dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 17/02/2007, 15h48
  3. Réponses: 1
    Dernier message: 18/07/2006, 22h43
  4. Modifier la couleur d'arrière plan des dossiers
    Par FRED.G dans le forum Autres Logiciels
    Réponses: 5
    Dernier message: 26/04/2006, 13h09
  5. couleur d'arrière plan
    Par PAUL87 dans le forum Access
    Réponses: 4
    Dernier message: 27/12/2005, 11h23

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