Tkinter Text.add_tag

Le
JBB
Bonjour,
j'utilise TKinte comme interface et j'ai un petit problème:
j'ai un fenetre avec un control Text
dans lequel j'ajoute des lignes de couleurs differentes
pour cela j'utilise tag_add

pour ajouter un ligne coloriee je fais:

#recupere la fin
fin_texte=self.Texte.index(Tkinter.END)
#recupere le numero de la deriere ligne
derniere_ligne = int(fin_texte.split('.')[0])-1
#insere le texte
self.Texte.insert(Tkinter.END, montexte)
# applique le tag correspondant à ma couleur sur la dernière ligne
self.Texte.tag_add(macouleur,"%d.0"%derniere_ligne,"%d.end"%derniere_ligne)

ca marche mais:
- des fois ca plante ( fin_texte vaut None )
- je trouve ca compliqué alors ce que je veut faire me parait assez simple

des idées?
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Pierre Maurette
Le #611316
Bonjour,
j'utilise TKinte comme interface et j'ai un petit problème:
j'ai un fenetre avec un control Text
dans lequel j'ajoute des lignes de couleurs differentes
pour cela j'utilise tag_add

pour ajouter un ligne coloriee je fais:

#recupere la fin
fin_texte=self.Texte.index(Tkinter.END)
#recupere le numero de la deriere ligne
derniere_ligne = int(fin_texte.split('.')[0])-1
#insere le texte
self.Texte.insert(Tkinter.END, montexte)
# applique le tag correspondant à ma couleur sur la dernière ligne
self.Texte.tag_add(macouleur,"%d.0"%derniere_ligne,"%d.end"%derniere_ligne)

ca marche mais:
- des fois ca plante ( fin_texte vaut None )
- je trouve ca compliqué alors ce que je veut faire me parait assez simple

des idées?


Il me semble que je fais un peu plus simple, puisqu'on peut envoyer le
tag dans le insert, mais je complique à un autre niveau (le choix du
tag). Mais je n'ai peut-être pas compris votre question.

Lors de la création de mon Text (c'est un ScrolledText, mais peu
importe):

self.logbox = ScrolledText(self.logframe, height=4, width=0)
self.logbox.tag_config("hl1", background="grey90", foreground="red")
self.logbox.tag_config("hl2", background="grey90", foreground="blue")
self.logbox.tag_config("hl3", foreground="green")


Pour faciliter, je les mets dans un tuple:

TAGS = ('hl1', 'hl2', None)


Au final, j'ajoute ", tag=TAGS[condindex])" quand j'appelle ma fonction
d'affichage qui en deux étapes aboutit à:

def printaline(self, line, **kwargs):
self.logbox.insert(END, line + 'n', kwargs.get('tag', None))

Dans votre exemple, vous feriez:

# A la création
self.Text.tag_config('nom_un_tag', macouleur)
...
#A l'utilisation
self.Texte.insert(Tkinter.END, montexte, tag='nom_un_tag')

ou alors:
tag='nom_un_tag' #ou un autre, ou None..
self.Texte.insert(Tkinter.END, montexte, tag=tag)

--
Pierre Maurette

Pierre Maurette
Le #611314
(supersedes
Bonjour,
j'utilise TKinte comme interface et j'ai un petit problème:
j'ai un fenetre avec un control Text
dans lequel j'ajoute des lignes de couleurs differentes
pour cela j'utilise tag_add

pour ajouter un ligne coloriee je fais:

#recupere la fin
fin_texte=self.Texte.index(Tkinter.END)
#recupere le numero de la deriere ligne
derniere_ligne = int(fin_texte.split('.')[0])-1
#insere le texte
self.Texte.insert(Tkinter.END, montexte)
# applique le tag correspondant à ma couleur sur la dernière ligne
self.Texte.tag_add(macouleur,"%d.0"%derniere_ligne,"%d.end"%derniere_ligne)

ca marche mais:
- des fois ca plante ( fin_texte vaut None )
- je trouve ca compliqué alors ce que je veut faire me parait assez simple

des idées?


Il me semble que je fais un peu plus simple, puisqu'on peut envoyer le
tag dans le insert, mais je complique à un autre niveau (le choix du
tag). Mais je n'ai peut-être pas compris votre question.

Lors de la création de mon Text (c'est un ScrolledText, mais peu
importe):

self.logbox = ScrolledText(self.logframe, height=4, width=0)
self.logbox.tag_config("hl1", background="grey90", foreground="red")
self.logbox.tag_config("hl2", background="grey90", foreground="blue")
self.logbox.tag_config("hl3", foreground="green")


Pour faciliter, je les mets dans un tuple:

TAGS = ('hl1', 'hl2', None)


Au final, j'ajoute ", tag=TAGS[condindex])" quand j'appelle ma fonction
d'affichage qui en deux étapes aboutit à:

def printaline(self, line, **kwargs):
self.logbox.insert(END, line + 'n', kwargs.get('tag', None))

Dans votre exemple, vous feriez:

# A la création
self.Text.tag_config('nom_un_tag', macouleur)
...
#A l'utilisation
self.Texte.insert(Tkinter.END, montexte, 'nom_un_tag')

ou alors:
tag='nom_un_tag' #ou un autre, ou None..
self.Texte.insert(Tkinter.END, montexte, tag)

(j'ai corrigé une erreur)

--
Pierre Maurette

Pierre Maurette
Le #629538
Bonjour,


[...]

des idées?


Je ne sais si vous ferez quelque chose de ma réponse précédente. En
revanche, je vous remercie, je ne m'étais pas encore posé la question
d'un tag sur une partie de ligne, et je vous ai volé votre code, que je
ne trouve pas compliqué outre-mesure. Ça donne:

def printaline(self, line, **kwargs):
LOG.debug(self.__class__.__name__)
last_line = int(self.logbox.index(END).split('.')[0]) - 1
self.logbox.insert(END, line + 'n')
if 'tag' in kwargs and kwargs['tag']:
deb = line.find(kwargs['tagged'])
fin = deb + len(kwargs['tagged'])
self.logbox.tag_add(kwargs['tag']
, "%d.%d"%(last_line , deb)
, "%d.%d"%(last_line , fin))

--
Pierre Maurette

JBB
Le #620241
(supersedes
Bonjour,
j'utilise TKinte comme interface et j'ai un petit problème:
j'ai un fenetre avec un control Text
dans lequel j'ajoute des lignes de couleurs differentes
pour cela j'utilise tag_add

pour ajouter un ligne coloriee je fais:

#recupere la fin
fin_texte=self.Texte.index(Tkinter.END)
#recupere le numero de la deriere ligne
derniere_ligne = int(fin_texte.split('.')[0])-1
#insere le texte
self.Texte.insert(Tkinter.END, montexte)
# applique le tag correspondant à ma couleur sur la dernière ligne
self.Texte.tag_add(macouleur,"%d.0"%derniere_ligne,"%d.end"%derniere_ligne)


ca marche mais:
- des fois ca plante ( fin_texte vaut None )
- je trouve ca compliqué alors ce que je veut faire me parait assez
simple

des idées?


Il me semble que je fais un peu plus simple, puisqu'on peut envoyer le
tag dans le insert, mais je complique à un autre niveau (le choix du
tag). Mais je n'ai peut-être pas compris votre question.

Lors de la création de mon Text (c'est un ScrolledText, mais peu importe):

self.logbox = ScrolledText(self.logframe, height=4, width=0)
self.logbox.tag_config("hl1", background="grey90", foreground="red")
self.logbox.tag_config("hl2", background="grey90", foreground="blue")
self.logbox.tag_config("hl3", foreground="green")


Pour faciliter, je les mets dans un tuple:

TAGS = ('hl1', 'hl2', None)


Au final, j'ajoute ", tag=TAGS[condindex])" quand j'appelle ma fonction
d'affichage qui en deux étapes aboutit à:

def printaline(self, line, **kwargs):
self.logbox.insert(END, line + 'n', kwargs.get('tag', None))

Dans votre exemple, vous feriez:

# A la création
self.Text.tag_config('nom_un_tag', macouleur)

....
#A l'utilisation
self.Texte.insert(Tkinter.END, montexte, 'nom_un_tag')
C'est exactement cela que je cherchais.

C'est encore plus simple que je ne me l'imaginais.
Je comprends mieux maintenant la signification de:
An additional tag can be given in ARGS.
quand je fais help(Tkinter.text.insert)


ou alors:
tag='nom_un_tag' #ou un autre, ou None..
self.Texte.insert(Tkinter.END, montexte, tag)

(j'ai corrigé une erreur)




Publicité
Poster une réponse
Anonyme