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

Python Discussion :

Bug incompréhensible Tkinter - Entry Widget + unicode + accent


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Bug incompréhensible Tkinter - Entry Widget + unicode + accent
    Bonjour,
    Je suis désemparé, j'ai cherché une solution toute la nuit et rien...
    Bon voila mon problème, je cherche à "enlever" les accents d'une variable récupérée depuis le widget Entry de tkinter. Le truc bateau que j'ai gardé pour la fin en me disant que ça serait du gâteau...
    J'ai essayé tout ce que je connaissais dont unicodedata et des méthodes bien moches comme la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    auteur = entreeAuteur.get()
    auteur2=auteur.encode('utf8').lower()
    accents2 = [[u"à","a"],[u"â","a"],[u"ä","a"],[u"ç","c"],[u"è","e"],[u"é","e"],[u"ê","e"],[u"ë","e"],[u"î","i"],[u"ï","i"],[u"ô","o"],[u"ù","u"],[u"û","u"],[u"ü","u"]]
    for a in accents2:
    	auteur3 = auteur2.replace(a[0].encode('utf8'),a[1])
    print(auteur3)
    Lorsque j'essaye ce bout de code ça marche niquel sur IDLE! Par contre une fois incorporé à mon script ben il tourne dans le vide sans afficher aucun message d'erreur.
    J'ai finis par constater que si je limite la liste accents2 à un seul objet [u"é","e"] ben ça marche... Je comprends pas...

    Merci à ceux qui auraient le courage de répondre encore une fois sur un bug d'encodage...

    PS : J'utilise python 2.7.

  2. #2
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    Python possède les outils qu'il faut pour cela.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    >>> import unicodedata
    >>> s = u"Déjà-vu"
    >>> a = unicodedata.normalize('NFKD', s).encode('ascii', 'ignore')
    >>> a
    'Deja-vu'

  3. #3
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Salut,

    Citation Envoyé par LeNarvalo Voir le message
    J'ai finis par constater que si je limite la liste accents2 à un seul objet [u"é","e"] ben ça marche... Je comprends pas...
    Relisez votre code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for a in accents2:
    	auteur3 = auteur2.replace(a[0].encode('utf8'),a[1])
    auteur3 juste sera le résultat de la dernière itération.
    Çà marcherait en gardant les transformations successives:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for a in accents2:
    	auteur2 = auteur2.replace(a[0].encode('utf8'),a[1])
    Mais il est plus sage d'utiliser la méthode de VinsS.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  4. #4
    Invité
    Invité(e)
    Par défaut
    Merci beaucoup!!!
    Ah et puis aussi je viens de constater que le widget Entry renvoit en str et non en unicode quand il n'y a pas d'accent.
    C'est pas super pratique, faut que j'utilise ça du coup? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    auteur = entreeAuteur.get()
    try:
    	auteur2 = unicodedata.normalize('NFKD', auteur).encode('ascii', 'ignore').lower()
    except:
    	auteur2 = auteur.lower()
    PS : Je suis en train de lire quelques discussions entamées et beh vous avez bien du courage de répondre à cette brochette de noob que nous sommes! Chapeau!
    Dernière modification par Invité ; 28/05/2018 à 22h28.

Discussions similaires

  1. Réponses: 4
    Dernier message: 12/10/2016, 13h53
  2. Réponses: 18
    Dernier message: 15/02/2011, 06h48
  3. [Tkinter] Entry
    Par THE_VIP dans le forum Tkinter
    Réponses: 2
    Dernier message: 13/05/2006, 21h31
  4. [Tkinter] Entry
    Par THE_VIP dans le forum Tkinter
    Réponses: 2
    Dernier message: 07/05/2006, 22h05
  5. bug incompréhensible
    Par petdelascar dans le forum MFC
    Réponses: 4
    Dernier message: 19/11/2005, 19h31

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