Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[PyGTK] Mettre le texte en gras dans une cellule d'un Treeview

3 réponses
Avatar
J.Pierre Pourrez
Bonjour,

Sur une petite appli que j'ai réalisé avec un interface graphique
créé avec Glade, je n'arrive pas à mettre en gras tout le texte
des cellules dans un Treeview. Les données sont stockés dans
un Liststore.

J'ai beau relire le tutorial et le manuel de référence de
PyGTK, je ne trouve la fonction ou l'option à passer à
CellRendererText ou TreeViewColumn pour faire cela.

Quelqu'un a-t-il la réponse ?

D'avance merci
Jean-Pierre

3 réponses

Avatar
Adrien Di Mascio
Bonjour,

Le Thu, 10 Feb 2005 22:36:25 +0100, J.Pierre Pourrez a écrit :
Bonjour,
Sur une petite appli que j'ai réalisé avec un interface graphique
créé avec Glade, je n'arrive pas à mettre en gras tout le texte
des cellules dans un Treeview. Les données sont stockés dans
un Liststore.


Aller voir dans le tutorial :
http://www.pygtk.org/pygtk2tutorial/sec-CellRenderers.html

ou dans le code source d'applications : "meld" par exemple qui fait des
choses intéressantes avec les TreeViews :
http://meld.sourceforge.net/

Plusieurs façons de faire ...
Par exemple, spécifier quand tu construis ta colonne que tu vas utiliser
du texte balisés (pango) :
col = gtk.TreeViewColumn('colname', gtk.CellRendererText(), markup=0)
Tu dois alors avoir dans ton liststore des chaines dans le genre :
'<span foreground="#880000" weight="bold">du texte</span>'

Autre solution, tu spécifies un fonction à appeler pour faire le rendu :
def format_text(column, cell, model, treeiter):
# Récupérer le texte à afficher pour la case en question ...
text = get_text_from_iter(treeiter)
cell.set_property('markup', '<span ...>%s</span>' %s text)
# Et puis au moment de construire ta colonne, tu appelles
# set_cell_data_func
col.set_cell_data_func(text_renderer, format_text)


Encore une autre solution, tu stockes tout ça dans ton ListStore :

store = gtk.ListStore(str, int, str)
store.append('Ligne1', pango.WEIGHT_BOLD, 'red'])
store.append('Ligne2', 0, 'green')
tview = gtk.TreeView(store)
col = gtk.TreeViewColumn('colname', gtk.CellRendererText(),
text = 0, # Texte dans col d'indice 0
weight = 1, #Poids du texte dans col d'indice 1
foreground = 2) #Couleur à l'indice 2
tview.append_column(col)

et hop ...

Note : j'ai pas testé ces solutions ;-), mais dans l'idée, elles
fonctionnent, je les ai déjà utilisées


En espérant que ça aide,

Cordialement,
Adrien.


--
Adrien Di Mascio
LOGILAB, Paris (France).
http://www.logilab.com http://www.logilab.fr http://www.logilab.org

Avatar
J.Pierre Pourrez
Sur une petite appli que j'ai réalisé avec un interface graphique
créé avec Glade, je n'arrive pas à mettre en gras tout le texte
des cellules dans un Treeview. Les données sont stockés dans
un Liststore.


Aller voir dans le tutorial :
http://www.pygtk.org/pygtk2tutorial/sec-CellRenderers.html

ou dans le code source d'applications : "meld" par exemple qui fait des
choses intéressantes avec les TreeViews :
http://meld.sourceforge.net/

Plusieurs façons de faire ...
Par exemple, spécifier quand tu construis ta colonne que tu vas utiliser
du texte balisés (pango) :
col = gtk.TreeViewColumn('colname', gtk.CellRendererText(), markup=0)
Tu dois alors avoir dans ton liststore des chaines dans le genre :
'<span foreground="#880000" weight="bold">du texte</span>'

Autre solution, tu spécifies un fonction à appeler pour faire le rendu :
def format_text(column, cell, model, treeiter):
# Récupérer le texte à afficher pour la case en question ...
text = get_text_from_iter(treeiter)
cell.set_property('markup', '<span ...>%s</span>' %s text)
# Et puis au moment de construire ta colonne, tu appelles
# set_cell_data_func
col.set_cell_data_func(text_renderer, format_text)


Encore une autre solution, tu stockes tout ça dans ton ListStore :

store = gtk.ListStore(str, int, str)
store.append('Ligne1', pango.WEIGHT_BOLD, 'red'])
store.append('Ligne2', 0, 'green')
tview = gtk.TreeView(store)
col = gtk.TreeViewColumn('colname', gtk.CellRendererText(),
text = 0, # Texte dans col d'indice 0
weight = 1, #Poids du texte dans col d'indice 1
foreground = 2) #Couleur à l'indice 2
tview.append_column(col)

et hop ...

Note : j'ai pas testé ces solutions ;-), mais dans l'idée, elles
fonctionnent, je les ai déjà utilisées


C'est bien compliqué GTK. Et Glade est pas très sympa n'aide pas pour
faire les tableaux vite faits. Et comme je n'ai pas lu la doc de GTK2,
évidemment j'ai des lacunes :-(

J'avais bien remarqué la fonction
CellRendererText.set_property(property, value) et la propriété weight.
Le hic est que je savais pas trop quoi mettre à value.
En lisant en coup de vent la doc de GTK2 et avec un coup de "pydoc
pango", j'en suis arrivé une solution qui marche:

import gtk, pango
c = gtk.CellRendererText.set_property('weight', pango.WEIGHT_BOLD)
c = gtk.CellRenderrText.set_property('foreground','blue3')

N.B.: Pour les couleurs, c'est plus simple. la valeur est une chaine de
texte à récupérer en lançant xcolorsel dans son OS favori.

En espérant que ça aide,
Merci bien, je vais lire les exemples et la doc à tête reposée :-)

Cordialement,
Pareillement

Jean-Pierre


Avatar
J.Pierre Pourrez

import gtk, pango
c = gtk.CellRendererText.set_property('weight', pango.WEIGHT_BOLD)
c = gtk.CellRenderrText.set_property('foreground','blue3')


Petit correctif:
avec un "print int(pango.WEIGHT_BOLD)", on peut remplacer ci-dessus par:

import gtk
c = gtk.CellRendererText.set_property('weight', 700)
c = gtk.CellRendererText.set_property('foreground', 'blue3')

Cordialement,
Jean-Pierre