Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 30/07/2016, à 15: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, à 13:12)

Hors ligne

#2 Le 30/07/2016, à 15: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, à 16:08

pingouinux

Re : Python : utilisation de 'tag' [Résolu]

Bonjour,
Je ne connais pas l'usage du widget 'tag', mais voici 2 remarques :

  1. liste=of.readlines()              # lecture du fichier
    listeSec="".join(liste)

    peut-être simplifié

    listeSec=of.read()              # lecture du fichier
  2. p=250
    pSt = "1.{0}".format(p)
    print(pSt)

    Le résultat sera 1.250

Hors ligne

#4 Le 30/07/2016, à 16: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