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

GTK+ avec Python Discussion :

Mettre en gras certains lignes dans un treeview


Sujet :

GTK+ avec Python

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Août 2011
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Transports

    Informations forums :
    Inscription : Août 2011
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Mettre en gras certains lignes dans un treeview
    Bonjour,

    Je développe en python et gtk un petit notificateur de mail pour linux (ubuntu).
    Je suis actuellement bloqué sur 2 points avec la partie GTk.

    J'ai créé un treeview qui contient une liste de mails (émetteur, sujet, date)
    les données sont dans un liststore.

    J'aimerai savoir comment mettre en gras le texte des cellules de certaines lignes de mon treeview.

    1er cas, mettre le texte en gras si les mails ne se trouvent pas dans un liste donnée par ex : mails_read

    2eme cas, mettre en gras les lignes (mails) sur lesquels je "double click".
    et inversement enlever le texte en gras si je "double click" sur une ligne où le texte est déjà en gras.

    J’espère avoir été clair d'avance MErci

  2. #2
    Membre averti
    Inscrit en
    Janvier 2007
    Messages
    329
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 329
    Points : 366
    Points
    366
    Par défaut
    Salut,

    Pour commencer, ajoute un attribut pango.Weight à ton ListStore, tu pourras alors stocker le poids de la police et le modifier suivant tes besoins.
    Regarde ce sujet pour voir comment mettre une case en gras.

    Pour ton cas 1, lorsque tu (ré)actualise ton treeview, regarde si ton mail est dans la liste mails_read, et actualise le poids en NORMAL ou BOLD avec set_value suivant les cas.

    Pour ton cas 2, connecte le signal 'row-activated' à ton TreeView, et mets un callback du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    def ev_row_activated(self, widget, path, column):
        model = widget.get_model()
        iter = model.get_iter(path)
        if model.get_value(iter, colonne_du_liststore_qui_contient_le_poids) == pango.WEIGHT_NORMAL:
            model.set_value(iter, colonne_du_liststore_qui_contient_le_poids, pango.WEIGHT_BOLD)
        else:
            model.set_value(iter, colonne_du_liststore_qui_contient_le_poids, pango.WEIGHT_NORMAL)
        return

    J'espère que ça répond à ta question

    .

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 24
    Points : 27
    Points
    27
    Par défaut
    Citation Envoyé par monnomamoi Voir le message
    Salut,

    Pour commencer, ajoute un attribut pango.Weight à ton ListStore, tu pourras alors stocker le poids de la police et le modifier suivant tes besoins.
    Regarde ce sujet pour voir comment mettre une case en gras.

    Pour ton cas 1, lorsque tu (ré)actualise ton treeview, regarde si ton mail est dans la liste mails_read, et actualise le poids en NORMAL ou BOLD avec set_value suivant les cas.

    Pour ton cas 2, connecte le signal 'row-activated' à ton TreeView, et mets un callback du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    def ev_row_activated(self, widget, path, column):
        model = widget.get_model()
        iter = model.get_iter(path)
        if model.get_value(iter, colonne_du_liststore_qui_contient_le_poids) == pango.WEIGHT_NORMAL:
            model.set_value(iter, colonne_du_liststore_qui_contient_le_poids, pango.WEIGHT_BOLD)
        else:
            model.set_value(iter, colonne_du_liststore_qui_contient_le_poids, pango.WEIGHT_NORMAL)
        return

    J'espère que ça répond à ta question

    .
    Avant tout merci d'avoir répondu !!!
    Pour mon cas 1, comment ajoute-t-on un attribut pango.Weight à un liststore?

    N'ayant pas trouvé, J'ai contourné le pb en utilisant un treestore!

    Je joins mon code , avec lequel j'arrive à avoir 1 ligne avec du texte normal et 1 ligne avec du texte en gras.
    Le problème est que cela fonctionne qu'avec 1 colonne. Si j'ajoute une 2eme colonne, les 2 lignes restent avec du texte normal.
    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
    	        # Creation d'une nouvelle fenetre
            	self.fenetre = gtk.Window(gtk.WINDOW_TOPLEVEL)
    		self.fenetre.set_title(title)
     
    		# Dimension de la fenetre
    		_ = gettext.gettext
                    colhead = [_('From'), _('Date'), _('Subject')]
                    width, hight = self.get_window_size(rows, colhead)                              
                    self.fenetre.set_default_size(width, hight)
     
    	        #fenetre.connect("delete_event", self.delete_event)
     
    	        # creation d'une liststore avec des colonnes chaine comme modele
    		self.treestore = gtk.TreeStore(str, str, pango.Weight)
     
    	        # creation d'une vue utilisant le liststore
    	        self.treeview = gtk.TreeView(self.treestore)
    		self.treeview.get_selection().set_mode(gtk.SELECTION_MULTIPLE)
     
     
    		# Attribue du Treeview
    	        renderer = gtk.CellRendererText()
    		column0 = gtk.TreeViewColumn(colhead[0], renderer, text=0, weight=1)
    		column1 = gtk.TreeViewColumn(colhead[1], renderer, text=0, weight=1)
                    self.treeview.append_column(column0)
                    self.treeview.append_column(column1)
     
    		self.treestore.append(None, ["texte normal", "c2", pango.WEIGHT_NORMAL])
    		self.treestore.append(None, ["texte gras", "c2", pango.WEIGHT_BOLD])
     
    		self.fenetre.add(self.treeview)
    	        self.fenetre.show_all()

    Merci d'avance

  4. #4
    Membre averti
    Inscrit en
    Janvier 2007
    Messages
    329
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 329
    Points : 366
    Points
    366
    Par défaut
    Pour ajouter un attribut pango.Weight à un liststore, ben on fait comme avec un treestore :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    self.liststore = gtk.ListStore(str, str, pango.Weight)
    ...
    self.liststore.append(["texte normal", "c2", pango.WEIGHT_NORMAL])
    self.liststore.append(["texte gras", "c2", pango.WEIGHT_BOLD])
    Défini comme tel, ton ListStore contient 3 colonnes : un texte en 0, un deuxième texte en 1 et le poids en 2.

    Lorsque tu crées tes treeViewColumns, mets bien les bons indices si tu veux que ça marche. En mettant weight=1, tu prends donc la colonne 1 du ListStore comme source pour le poids, or elle contient du texte...

    Dernier problème : il faut créer un renderer par colonne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    # Attributs du TreeView
    renderer0 = gtk.CellRendererText()
    renderer1 = gtk.CellRendererText()
    column0 = gtk.TreeViewColumn(colhead[0], renderer0, text=0, weight=2)
    column1 = gtk.TreeViewColumn(colhead[1], renderer1, text=1, weight=2)
    self.treeview.append_column(column0)
    self.treeview.append_column(column1)
    J'espère que c'est plus clair

    -

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 24
    Points : 27
    Points
    27
    Par défaut
    Citation Envoyé par monnomamoi Voir le message
    Pour ajouter un attribut pango.Weight à un liststore, ben on fait comme avec un treestore :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    self.liststore = gtk.ListStore(str, str, pango.Weight)
    ...
    self.liststore.append(["texte normal", "c2", pango.WEIGHT_NORMAL])
    self.liststore.append(["texte gras", "c2", pango.WEIGHT_BOLD])
    Défini comme tel, ton ListStore contient 3 colonnes : un texte en 0, un deuxième texte en 1 et le poids en 2.

    Lorsque tu crées tes treeViewColumns, mets bien les bons indices si tu veux que ça marche. En mettant weight=1, tu prends donc la colonne 1 du ListStore comme source pour le poids, or elle contient du texte...

    Dernier problème : il faut créer un renderer par colonne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    # Attributs du TreeView
    renderer0 = gtk.CellRendererText()
    renderer1 = gtk.CellRendererText()
    column0 = gtk.TreeViewColumn(colhead[0], renderer0, text=0, weight=2)
    column1 = gtk.TreeViewColumn(colhead[1], renderer1, text=1, weight=2)
    self.treeview.append_column(column0)
    self.treeview.append_column(column1)
    J'espère que c'est plus clair

    -
    Merci c'est très clair maintenant, pour preuve cela fonctionne
    Par contre ce que je ne trouve bizarre, c'est que je définie la taille de ma fenetre et lorsque je lance mon prg comme j'ai bcp de lignes, la fentre prend tout l'écran et quand je diminue la fenetre la diminution est bloquée car il n'y a pas de scrollbar qui apparait pour le treeview ou liststore.

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 24
    Points : 27
    Points
    27
    Par défaut
    Citation Envoyé par Linux44 Voir le message
    Merci c'est très clair maintenant, pour preuve cela fonctionne
    Par contre ce que je ne trouve bizarre, c'est que je définie la taille de ma fenetre et lorsque je lance mon prg comme j'ai bcp de lignes, la fentre prend tout l'écran et quand je diminue la fenetre la diminution est bloquée car il n'y a pas de scrollbar qui apparait pour le treeview ou liststore.
    J'ai trouvé pour le scrollWindow
    Vraiment Merci

Discussions similaires

  1. [XL-2007] Mettre en gras certain mot dans formule
    Par Pompaero dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 12/05/2013, 10h35
  2. Mettre en gras une ligne dans un Zend_Form_Element_Textarea
    Par TsCyrille dans le forum Zend_Form
    Réponses: 3
    Dernier message: 20/06/2012, 11h00
  3. [AC-2003] Mettre en gras certains mot dans un champ indépendant
    Par isabelle b dans le forum IHM
    Réponses: 6
    Dernier message: 01/07/2009, 22h14
  4. [VBA-W] mettre en gras certaines lignes d'un tableau
    Par perophron dans le forum VBA Word
    Réponses: 22
    Dernier message: 18/04/2007, 17h59
  5. Mettre une saut de ligne dans une balise alt
    Par PrinceMaster77 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 16/12/2004, 08h45

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