#1 Le 30/07/2016, à 14:34
- Hourra!
Python : utilisation de 'tag' [Résolu]
Bonjour à tous,
Qui pourrais me dire comment utiliser le widget 'tag' dans Python ?
Je m'explique :
J'ai un fichier lu avec la commande readlines() (en une seule fois donc).
Ensuite, je le convertis en 'string' avec la fonction 'join'; je possède donc un 'string' de plusieurs lignes. Dans le fichier .txt lu avec readlines(), les lignes se terminent par un '\n' (renvois à la ligne), c'est donc des lignes séparées qui apparaissent dans mon 'string'.
Je recherche la position d'une chaîne de caractère dans mon 'string' avec la fonction 'ma_liste.index(carac)'; il trouve la position, en 250 par exemple, mais la chaîne de caractère demandée se trouve dans la liste à la troisième ligne par exemple.
J'utilise la fonction 'pSt = "1.{0}".format(p) # 'pSt', index de début de chaine' , dont (p) est mon index (250).
Et je demande de mettre cette chaîne de caractère en bleu, par exemple.
Mais que signifie le '1' dans l'expression '1.{0}' ? Car comme la chaine recherchée est en deuxième ligne, ça ne fonctionne pas ... et placer un '2' à la place du '1' ne fonctionne pas ...
Par contre, si je prend une chaîne de caractère qui se trouve sur la première ligne, ca fonctionne !
En image :
def importFichier(self, fichier, encodage ="Utf8"):
global listeSec
of =open(fichier, "r")
listeSec=[]
liste=of.readlines() # lecture du fichier
of.close()
listeSec="".join(liste)
et plus bas :
def initialise (sec):
global listeSec
p = listeSec.index(sec) # 'p' est le début de la chaine de caractère 'sec' dans 'Sections'
print (p)
pSt = "1.{0}".format(p) # 'pSt', index de début de chaine
pEn = "1.{0}".format(p+3) # 'pEn', idex de fin de chaine
FenLis.text.tag_add("here", pSt, pEn) # Crée un nouveau tag
FenLis.text.tag_config("here",foreground="blue") # Change l'aspect du texte suivant le tag
et là, ca ne fonctionne pas si je me trouve, par exemple, sur la deuxième ligne de mon fichier qui est :
[AN] AAA ACC BRC HOB HRT LIR MCL MTT NOK OSA RCN VHF
[BW] BTS BDX BSE BTS BXE RCB WTO
[HT] ATH CLR CPN LLV MNS RAM THN
[LG] GDV LGE RAT RBO
[LI] HAC MLB NLB NOL RST TRC ZLB
[LX] CDZ LUS RAF RCA
[NM] BFA CRD GBX NMR RAC
[OV] ALT AST DNZ DRC EKO ERA GBN GNT GTM NNV ODE REM RSX SNW TLS WLD WRA WTN ZLZ ZTM
[VB] ATO BLW DST HCC LVN NBT ORA TWS
[WV] IPR KSD KTK MWV ONZ OSB OST TRA WRC
Si je demande, par exemple, de mettre 'LGE' (quatrième ligne) en bleu, il trouve bien l'index (128), mais ne le met pas en bleu ??????
Qui peut m'aider avec le tag ???
Merci.
Geoffroy
PS : Python 3.4.3
Dernière modification par Hourra! (Le 19/08/2016, à 12:12)
Hors ligne
#2 Le 30/07/2016, à 14:55
- Hourra!
Re : Python : utilisation de 'tag' [Résolu]
Ok, le "1" se trouvant dans l'expression '1.{0}.format(p) représente en effet bien le numéro de la ligne.
Si j'écrit directement '2.5' et '2.8', il me met bien 'BTS' (dans mon exemple) en bleu.
Je dois donc définir la longueur des différentes lignes de manière à savoir à quelle ligne l'index '250', par exemple, fait allusion.
Hors ligne
#3 Le 30/07/2016, à 15:08
- pingouinux
Re : Python : utilisation de 'tag' [Résolu]
Bonjour,
Je ne connais pas l'usage du widget 'tag', mais voici 2 remarques :
liste=of.readlines() # lecture du fichier listeSec="".join(liste)
peut-être simplifié
listeSec=of.read() # lecture du fichier
p=250 pSt = "1.{0}".format(p) print(pSt)
Le résultat sera 1.250
Hors ligne
#4 Le 30/07/2016, à 15:17
- Hourra!
Re : Python : utilisation de 'tag' [Résolu]
Bonjour Pingouinux,
Je ne connaît pas non plus l'utilisation de 'tag', mais je pense avoir trouvé.
Pour commencer :
Merci pour tes réflexions. J'ai essayé et je vais utiliser ta simplification pour la lecture du fichier.
Pour le résultat, je dois donc avoir le début de la chaîne, par exemple 1.250, comme tu l'as bien dit, mais aussi la fin de la chaîne, en trois caractères, donc, 1.253, d'où l'utilisation de '"1.{0}".format(p+3) !
Mais pour le reste, j'ai donc vu sur le net que le '1' dans l'expression '1.250" représente bien la première ligne, donc, si 250 se trouve sur la troisième ligne, par exemple, je dois donc définir la ligne et changer mon expression en :
p=250
t=3
pSt = "{0}.{1}".format(t,p)
par exemple.
J'ai testé, cela fonctionne.
Merci quand même pour tes bonnes remarques !
Geoffroy
Hors ligne