[PyGTK] Mettre le texte en gras dans une cellule d'un Treeview
3 réponses
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.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
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
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
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
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 :-)
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
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
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')