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

Tkinter Text.add_tag

4 réponses
Avatar
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?

4 réponses

Avatar
Pierre Maurette
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

Avatar
Pierre Maurette
(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

Avatar
Pierre Maurette
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

Avatar
JBB
(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)