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

wxPython Discussion :

Problème TextCtrl et print "\r",


Sujet :

wxPython

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 36
    Par défaut Problème TextCtrl et print "\r",
    Bonjour à tous,

    Je suis sous wxpython.
    Voila j’utilise un TextCtrl pour afficher du texte.
    Ayant plusieurs TextCtrl j’utilise une redirection du print pour afficher sur le bon TextCtrl
    Voici le code pour rediriger :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    # La classe derive de la class Output, reimplante fonction write()
    # ici on peut changer la couleur de print
    class GuiOutput(Output):
        """Cette classe permet d'afficher le message sur la fenetre du logiciel"""
     
        def __init__(self, gui_out): 
            self.gui_out = gui_out
     
        def write(self, text):
            self.gui_out.SetDefaultStyle(wx.TextAttr(VarGlobal.myColor))
            self.gui_out.AppendText(text)
            self.gui_out.SetDefaultStyle(wx.TextAttr("black"))
    Jusque là tout va bien et tout fonctionne lorsque je fais des print.
    Le problème survient lorsque je veux afficher un texte du style "\rtoto".
    Je m’explique :
    Je veux afficher un pourcentage de progression (tout sur une même ligne en modifiant juste le pourcentage.
    Pour cela j’utilise le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for i in range(10):
        print "\rpourcentage : %s"%i,
    Ce même code exécuté dans une fenêtre msdos ne pose pas de problème, mais dans mon appli le "\r" est remplacé par un "\r\n" (un saut de ligne et non un retour chariot).

    J’ai essayé de remplacer le "\r" par chr(8) pour effacer un caractère mais cela affiche un carré suivit d’un saut de ligne.

    Avez-vous une idée pour régler ce problème.

    Cordialement
    Merci d’avance
    Jean-Michel

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 36
    Par défaut
    Bonjour a tous,

    j'ai fais d'autres essais j'ai utilisé la fonction sys.stdout.write("\rtext"). Cela fonctionne tres bien dans une fenetre msdos mais dans mon appli cela revient a faire un saut de ligne

    je vais regarder en changant la position du curseur mais bon ca devient plus compliqué

    merci de m'aider
    Jean-Michel

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 36
    Par défaut
    Bonjour,

    En fait le probleme c'est le TextCtrl qui remplace le "\r" par "\r\n".
    La seule solution que j'ai trouvé c'est de modifier le texte a affichicher.
    Pour le moment je n'ai gerer que les "\r" les "\b" c'est pour plus tard
    Voici le code:
    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
    class GuiOutput(Output):
        """Cette classe permet d'afficher le message sur la fenetre du logiciel"""
     
        def __init__(self, gui_out): 
            self.gui_out = gui_out
     
        def write(self, text):
            self.gui_out.SetDefaultStyle(wx.TextAttr(VarGlobal.myColor))
            flag = False
     
            text=text.splitlines(1)
            for elem in text:
                if flag:
                    pos = self.gui_out.GetInsertionPoint()
                    x,y = self.gui_out.PositionToXY(pos)
                    pos2= self.gui_out.XYToPosition(0, y)
                    self.gui_out.Replace(pos2,pos2+len(elem.replace("\r","").replace("\n","")),elem.replace("\r","").replace("\n",""))
                    self.gui_out.SetInsertionPointEnd()
                    if elem.endswith("\r\n") or elem.endswith("\n"):
                        self.gui_out.AppendText("\n")
                    flag  = False
                else:
                    self.gui_out.AppendText(elem.replace("\r",""))
     
                if elem.endswith("\r"):
                    flag = True
     
            self.gui_out.SetDefaultStyle(wx.TextAttr("black"))
    Voila

    Jean-Michel

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 36
    Par défaut
    bonjour à tous

    voici le programme au complet (et qui fonctionne bien chez moi)

    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
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    class Static_Variables(object):
        flag  = False
        flag2 = False
        pos = 0
        display = 1
     
    staticVariables = Static_Variables()
     
    # La classe derive de la class Output, reimplante fonction write()
    # ici on peut changer la couleur de print
    class GuiOutput(Output):
        """Cette classe permet d'afficher le message sur la fenetre du logiciel"""
     
        def __init__(self, gui_out): 
            self.gui_out = gui_out
     
        def write(self, text):
     
            if staticVariables.display == 0:   #desactive l'affichage
                pass
     
            elif staticVariables.display == 1:   # affichage normal
                self.gui_out.SetDefaultStyle(wx.TextAttr(VarGlobal.myColor))
                self.gui_out.AppendText(text)
                self.gui_out.SetDefaultStyle(wx.TextAttr("black"))
     
            elif staticVariables.display == 2:    #affichage corrigé
     
                self.gui_out.SetDefaultStyle(wx.TextAttr(VarGlobal.myColor))
                flag = False
     
                text=text.splitlines(1)
                for elem in text:
                    if elem.find("\b") != -1:
                        for i in range(elem.count("\b")):
                            if elem.startswith("\b"):
                                elem = elem[1:]
                                remove2 +=1
                            else:
                                pos = elem.find("\b")
                                if pos >0:
                                    if pos < len(elem) and elem[pos+1] != "\b":
                                        if remove == 0:
                                            elem = elem[0:pos-1]+elem[pos+1:len(elem)]
                                        else:
                                            if (pos-remove-1) < 0:
                                                elem = elem[pos+1:len(elem)]+elem[pos-(remove-len(elem[pos+1:len(elem)])+1):pos]
                                            else:
                                                elem = elem[0:pos-remove-1]+elem[pos+1:len(elem)]+elem[pos-(remove-len(elem[pos+1:len(elem)])+1):pos]
                                            remove = 0
                                    else:
                                        remove += 1
                                        elem = elem[:pos] + elem[pos+1:]
                    if staticVariables.flag:
                        if staticVariables.flag2:
                            self.gui_out.Replace(staticVariables.pos,staticVariables.pos+len(elem.replace("\r","").replace("\n","")),elem.replace("\r","").replace("\n",""))
                            staticVariables.pos = self.gui_out.GetInsertionPoint()
                            self.gui_out.SetInsertionPointEnd()
                            if elem.endswith("\r\n") or elem.endswith("\n"):
                                self.gui_out.AppendText("\n")
                                staticVariables.flag  = False
                                staticVariables.flag2  = False
                            if elem.endswith("\r"):
                                staticVariables.flag  = False
                                staticVariables.flag2  = False
                        else:
                            pos = self.gui_out.GetInsertionPoint()
                            x,y = self.gui_out.PositionToXY(pos)
                            pos2= self.gui_out.XYToPosition(0, y)
                            self.gui_out.Replace(pos2,pos2+len(elem.replace("\r","").replace("\n","")),elem.replace("\r","").replace("\n",""))
                            staticVariables.pos = self.gui_out.GetInsertionPoint()
                            self.gui_out.SetInsertionPointEnd()
                            if elem.endswith("\r\n") or elem.endswith("\n"):
                                self.gui_out.AppendText("\n")
                                staticVariables.flag  = False
                            staticVariables.flag2 = True
                    else:
                        self.gui_out.AppendText(elem.replace("\r",""))
     
                    if elem.endswith("\r"):
                        staticVariables.flag = True
     
                self.gui_out.SetDefaultStyle(wx.TextAttr("black"))
    voila a+
    JM

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

Discussions similaires

  1. Problème "LoadModule ssl_module modules/mod_ssl.so"
    Par ldcarpathes dans le forum Apache
    Réponses: 9
    Dernier message: 24/01/2008, 11h07
  2. Formulaires : problème avec les slashes et les quotes
    Par GarGamel55 dans le forum Langage
    Réponses: 1
    Dernier message: 12/10/2005, 15h59

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