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 :

caractères qui ne s'affichent pas dans wxpython


Sujet :

wxPython

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2007
    Messages : 25
    Par défaut caractères qui ne s'affichent pas dans wxpython
    Salut a vous tous,
    Est-ce que quelqu'un aurait la solution a savoir que j'ai créé un petit logiciel pour entrer des numéros de téléphone ainsi que leur nom et quand j'écris un caractère accentué j'ai un message d'erreur a l'entrer dasns la base de donné et.
    Toutefois si j'utilise cette même routine dans le mode console, cela fonctionne très bien.
    Voici le code en espérant que vous trouverez une solution.
    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
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    #!/usr/bin/python
    # *- coding: iso-8859-1 -*
    import sys
    import os
    import string
    import wx #importation du modulegraphique wx
    import winsound
    ID_PARENT = 1000 #control ID de la fenetre principale
     
     
     
    #classe fenetre principalemenus et boutons
    class LesMenus(wx.Frame):
     def __init__(self, titre):
      wx.Frame.__init__(self, None, ID_PARENT, title = titre, size = (800, 600))
      self.panel = wx.Panel(self, -1, pos=(10,50),size=(300,400))
      self.panel.SetBackgroundColour('black')
      menuFichier = wx.Menu(style = wx.MENU_TEAROFF)
      menuFichier.Append(wx.ID_EXIT, "&Quitter\tCTRL+q") 
      menuAide = wx.Menu(style = wx.MENU_TEAROFF)
      menuAide.Append(wx.ID_ABOUT, "&A propos ...\tCTRL+N")
     
      #Barre de menu et affichage des menus dans cette barre
      menuBarre = wx.MenuBar() 
      menuBarre.Append(menuFichier, "&Fichier") 
      menuBarre.Append(menuAide, "&Aide") 
      self.SetMenuBar(menuBarre) 
     
      #creation des boutons
      boutonNiveau1 = wx.Button(self.panel, -1, "Recherche", pos=(200, 200))
      boutonNiveau2 = wx.Button(self.panel, -1, "Ajouter", pos=(200, 250))
     
      boutonAide = wx.Button(self.panel, -1, "Aide", pos=(600, 415))
      boutonExit = wx.Button(self.panel, -1, "Quitter", pos=(700, 415))
     
      #evenements des menus
      wx.EVT_MENU(self, wx.ID_EXIT, self.OnExit) 
      wx.EVT_MENU(self, wx.ID_ABOUT, self.OnAbout) 
     
      #evenements des boutons
      self.Bind(wx.EVT_BUTTON, self.OnExit, boutonExit)
      self.Bind(wx.EVT_BUTTON, self.OnAbout, boutonAide)
      self.Bind(wx.EVT_BUTTON, self.search, boutonNiveau1)
      self.Bind(wx.EVT_BUTTON, self.EcrireFichier, boutonNiveau2)
     
     
     #definition du menu quitter
     def OnExit(self, evt): 
     
      self.Destroy() 
     
     #definition du menu a propos
     def OnAbout(self, evt):
      d = wx.MessageDialog(self, "Petit ageinda", "A propos :Diagnostique ", wx.OK)
      d.ShowModal()
      d.Destroy()
     
     
     def search(self, evt):
    #nmf est nom de mon fichier
      nmf = 'lecture.txt'
    #db est un variable quelconque, don le nom de mon fichier et un paramètre r pour read 
      db = file(nmf,'r')
    #Db.readlines pour lire tous les lignes. A ne pas oublier le s a la fin de line
      liste = db.readlines()
     
    #Db.close veut dire fermer le fichier.
      db.close()
      n = wx.TextEntryDialog(self,"Entrez le nom ici","",style = wx.OK | wx.CANCEL | wx.CENTRE)
    #afficher la fenêtre tant et aussi longtemps que l'on ne la fermera pas
      reponse = n.ShowModal()
    #Récupération du text entré
      nn = n.GetValue()
      if reponse == wx.ID_OK or n == "":
       winsound.PlaySound('c:/Python25/wav_tel/bing.wav', winsound.SND_NODEFAULT)
     
       #n.Destroy()
      #recuperation du nombre en string
      for i in liste:
       if i.find(nn) <> -1:
        winsound.PlaySound('c:/Python25/wav_tel/bing.wav', winsound.SND_NODEFAULT)
        n = wx.MessageDialog(self, "le résultat est:  "+i, "affichage du résultat", wx.OK) 
        n.ShowModal()
        n.Destroy()
        return
     
     
     def EcrireFichier(self, evt):
     
      fichier = open('lecture.txt', 'a')
      ligne = wx.TextEntryDialog(self,"Entrez le texte ici","",style = wx.OK | wx.CANCEL | wx.CENTRE)
    #afficher la fenêtre tant et aussi longtemps que l'on ne la fermera pas
      reponse = ligne.ShowModal()
    #Récupération du text entré
      nn = ligne.GetValue()
      #recuperation du nombre en string
      if nn != '':
       fichier.write(nn +"\n")
       fichier.close()
       ligne.Destroy()
       return
     
    #la classe de l'application
    class MonApp(wx.App): 
     def OnInit(self): 
      fen = LesMenus("Numéro de Téléphone") 
      fen.Show(True) 
      self.SetTopWindow(fen) 
      return True 
     
    #boucle principale
    app = MonApp()
    app.MainLoop()

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 119
    Par défaut
    Bonjour,

    ca a l'air d'un probleme de gestion de l'unicode. Merci d'envoyer le message d'erreur.

    A verifier en attendant: il y a deux versions de wxpython: avec et sans unicode. Laquelle as tu installée? Par ailleurs, tes strings devraient etre précédées d'un u (u"Téléphone"). En python 3, toutes les strings seront unicode, mais d'ici la...

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2007
    Messages : 25
    Par défaut
    Merci et ci-joint le message d'erreur.
    wxPython: stdout/stderr
    Traceback (most recent call last):
    File "rechercheText.py", line 102, in EcrireFichier
    fichier.write(nn +"\n")
    UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 1: ordinal
    Le même message du code range 128 s'affiche si j'écris manuellement dans le fichier et que j'écris un accent.
    J'utilise la version 2.5 avec uni code.
    regimari

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 119
    Par défaut
    Manifestement, tu essaies d'écrire des caractères accentués directement dans un fichier ASCII. Voila un explication détaillée des problemes d'encoding en python: http://www.pyzine.com/Issue008/Secti...Encodings.html

    Pour faire simple, ceci devrait faire l'affaire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    fichier.write(nn.encode("latin-1") +"\n")
    par exemple. (ou un autre encoding suivant tes besoins).

    Mais ca n'explique pas pourquoi ca marche en mode console...

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2007
    Messages : 25
    Par défaut Caractère qui ne s'affiche pas!
    Un grand merci pour ta réponse!
    Cela a très bien fonctionné.
    Effectivement, je ne sais pas pourquoi cela fonctionne bien en mode console, mais je vais m'en souvenir.
    regimari

  6. #6
    Membre expérimenté Avatar de alexdevl
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    265
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2007
    Messages : 265
    Par défaut wx et accents donne UnicodeEncodeError
    Bonjour,
    Je reprends ce poste car j'ai eu le message d'erreur suivant en écrivant un fichier txt :
    UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 2: ordinal not in range(128)
    j'ai appliqué la méthode donné dans le lien suivant :
    http://www.developpez.net/forums/sho...hlight=unicode
    J'ai installé la version ansii et cela fonctionne maintenant.
    Mais..quand je ne comprend pas (au moins un peu) je ne suis pas rassuré car cela finit toujours par poser pb.
    Auriez vous une explication svp
    Alex

  7. #7
    Expert confirmé
    Avatar de Guigui_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2002
    Messages : 1 864
    Par défaut
    si tu utilises de l'unicode (donc accents ou caractères spéciaux) avec wxPython, installer la version unicode.
    Par contre, quand tu veux ecrire dans un fichier texte, s'il s'agit de l'unicode, il faut tout d'abord l'encoder en chaîne normale ( http://python.developpez.com/faq/?page=Unicode )

Discussions similaires

  1. Réponses: 15
    Dernier message: 23/01/2007, 15h27
  2. données qui ne s'affichent pas dans le formulaire
    Par zeloutre dans le forum Access
    Réponses: 16
    Dernier message: 04/10/2006, 15h29
  3. Page PHP qui ne s'affiche pas dans le site
    Par cyberdevelopment dans le forum Langage
    Réponses: 2
    Dernier message: 11/08/2006, 11h49
  4. excel: colonne qui ne s'affiche pas dans une liste
    Par fast&furious dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 19/07/2006, 18h12
  5. Champs qui ne s'affichent pas dans formulaire
    Par capitaine dans le forum Access
    Réponses: 1
    Dernier message: 02/06/2006, 15h00

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