IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Tkinter Python Discussion :

expressions régulières dans widget text


Sujet :

Tkinter Python

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 147
    Par défaut expressions régulières dans widget text
    Bonjour,

    J'essaie de faire des expressions régulières dans un widget text de tkinter.
    J'arrive à modifier la coloration de <<input>> mais je n'arrive pas à modifier celle de <<\input>> par exemple.
    De même les expressions entre <<$..$>> ne fonctionnent pas. Quelles sont les choses à modifier?

    Merci pour vos réponses.

    Gabriel

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    from tkinter import *
     
    def recherche(ev=None):
          # Recherche.
          nmbChar = IntVar()
          lastPos = "1.0"
          # Nombre.
          while 1 :
                liste_noms="(begin|item|input|sqrt)"
                lastPos = texte.search(liste_noms, index = lastPos, stopindex = 'end', regexp = 1, count = nmbChar )
                if lastPos == "" :
                      break
                # Ajout d'un tag
                texte.tag_add( 'bleu', lastPos, "%s + %d chars" % ( lastPos, nmbChar.get() )  )
                lastPos = "%s + 1 chars" % lastPos
          texte.tag_configure( 'bleu', foreground = 'blue',font=('courier',13))
     
          lastPos = "1.0"
          # Nombre.
          while 1 :
                liste_noms="(({)(.*)(}))"
                lastPos = texte.search(liste_noms, index = lastPos, stopindex = 'end', regexp = 1, count = nmbChar )
                if lastPos == "" :
                      break
                # Ajout d'un tag
                texte.tag_add( 'orange', lastPos, "%s + %d chars" % ( lastPos, nmbChar.get() )  )
                lastPos = "%s + 1 chars" % lastPos
          texte.tag_configure( 'orange', foreground = 'dark orange',font=('courier',13))
          while 1 :
                liste_noms="(($)(.*)($))"
                lastPos = texte.search(liste_noms, index = lastPos, stopindex = 'end', regexp = 1, count = nmbChar )
                if lastPos == "" :
                      break
                # Ajout d'un tag
                texte.tag_add( 'bleu', lastPos, "%s + %d chars" % ( lastPos, nmbChar.get() )  )
                lastPos = "%s + 1 chars" % lastPos
          texte.tag_configure( 'bleu', foreground = 'bleu',font=('courier',13))
     
    root = Tk()
    texte = Text( root )
    texte.grid()
     
    leText = """
    \\documentclass[11pt, a4paper]{article}
    \\input{C:/Gabriel/latex/perso/enonce.tex}
    %\\fenonce
    \\begin{document}
    \\begin{exercice}
    \\begin{enumerate}
    \\item%2
    \\input{c:/gabriel/ex333.tex} pour voir ce qui si passe.
    \\item%4
    \\input{c:/gabriel/ex331.tex}
    Je tape n'importe quoi du moment que ça fait du texte Une commande $\sqrt{n+1}$ et puis l'ensemble $\S=\{(x,y)\in\Rr^2\}$
    \\end{enumerate}
    \\end{exercice}
    \\end{document}
    """
     
    texte.insert( 'end', leText )
     
    root.bind_all('<KeyPress>',recherche)
     
    root.mainloop()

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 147
    Par défaut
    J'ai fini par comprendre 2-3 petites choses. L'importance du \...
    Le code ci-dessous devrait fonctionner
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
     
    from tkinter import *
     
    def recherche(ev=None):
          # Recherche.
          nmbChar = IntVar()
          lastPos = "1.0"
          # Nombre.
          while 1 :
                liste_noms="(begin|item|input|sqrt)"
                lastPos = texte.search(liste_noms, index = lastPos, stopindex = 'end', regexp = 1, count = nmbChar )
                if lastPos == "" :
                      break
                # Ajout d'un tag
                texte.tag_add( 'bleu', lastPos, "%s + %d chars" % ( lastPos, nmbChar.get() )  )
                lastPos = "%s + 1 chars" % lastPos
          texte.tag_configure( 'bleu', foreground = 'blue',font=('courier',13))
     
          lastPos = "1.0"
          # Nombre.
          while 1 :
                liste_noms="((\{)(.*)(\}))"
                lastPos = texte.search(liste_noms, index = lastPos, stopindex = 'end', regexp = 1, count = nmbChar )
                if lastPos == "" :
                      break
                # Ajout d'un tag
                texte.tag_add( 'orange', lastPos, "%s + %d chars" % ( lastPos, nmbChar.get() )  )
                lastPos = "%s + 1 chars" % lastPos
          texte.tag_configure( 'orange', foreground = 'dark orange',font=('courier',13))
          while 1 :
                liste_noms="((\$)([^\$])(\$))"
                lastPos = texte.search(liste_noms, index = lastPos, stopindex = 'end', regexp = 1, count = nmbChar )
                if lastPos == "" :
                      break
                # Ajout d'un tag
                texte.tag_add( 'bleu', lastPos, "%s + %d chars" % ( lastPos, nmbChar.get() )  )
                lastPos = "%s + 1 chars" % lastPos
          texte.tag_configure( 'bleu', foreground = 'bleu',font=('courier',13))
     
    root = Tk()
    texte = Text( root )
    texte.grid()
     
    leText = """
    \\documentclass[11pt, a4paper]{article}
    \\input{C:/Gabriel/latex/perso/enonce.tex}
    %\\fenonce
    \\begin{document}
    \\begin{exercice}
    \\begin{enumerate}
    \\item%2
    \\input{c:/gabriel/ex333.tex} pour voir ce qui si passe.
    \\item%4
    \\input{c:/gabriel/ex331.tex}
    Je tape n'importe quoi du moment que ça fait du texte Une commande $\sqrt{n+1}$ et puis l'ensemble $\S=\{(x,y)\in\Rr^2\}$
    \\end{enumerate}
    \\end{exercice}
    \\end{document}
    """
     
    texte.insert( 'end', leText )
     
    root.bind_all('<KeyPress>',recherche)
     
    root.mainloop()

  3. #3
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Pensez aussi a réinitialiser la valeur de lastPos
    Intérêt de nmbChar = IntVar() ?

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 147
    Par défaut
    En fait j'ai récupéré une grande partie du code dans le forum (et je ne comprends pas beaucoup de syntaxes du code...)

    Comment peut-on réinitialiser <<LastPos>>. Je pensais qu'en écrivant chaque fois <<LastPos="1.0">>, je réinitialisais...

    Quand à <<nmbChar = IntVar()>>, je n'en vois pas trop l'intérêt... mais en supprimant cette déclaration de variable, le programme ne tourne plus.

    Merci

    Gabriel

  5. #5
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Et là vous allez au mur.
    Comprenez par là que le copier/coller sans comprendre cela ne sert à rien.

    N'hésitez pas a revenir sur votre code et a poser des questions.

  6. #6
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Citation Envoyé par PauseKawa Voir le message
    Intérêt de nmbChar = IntVar() ?
    Je n'ai même pas regarder que l'on était dans le cadre de regexp...
    J'ai rien dis.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 8
    Dernier message: 11/07/2012, 15h05
  2. [RegEx] Utiliser une expression régulière dans une requête
    Par Tobleron dans le forum Langage
    Réponses: 2
    Dernier message: 18/02/2007, 19h00
  3. Expression reguliere dans fichier texte
    Par azmimik dans le forum Général Python
    Réponses: 6
    Dernier message: 02/01/2007, 23h48
  4. Réponses: 5
    Dernier message: 30/10/2006, 13h59
  5. Réponses: 1
    Dernier message: 03/02/2006, 12h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo