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 :

Probleme d'insertion dans une Treeview


Sujet :

Python

  1. #1
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2011
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2011
    Messages : 88
    Par défaut Probleme d'insertion dans une Treeview
    Bonjour tout le monde , je voudrais inserer dans ma Treeview Tkinter , des 'é' juste pour tester , comme cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tv.insert("","end", values=("%s %s %s"('é', 'é', 'é'))
    mais , quand je click sur le boutton pour inserer ces 'é' , sur le terminale on affiche l'erreur suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 2: ordinal not in range(128)
    Merci pour l'aide

  2. #2
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2011
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2011
    Messages : 88
    Par défaut
    Voila tout mon 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
    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
    #! /usr/bin/python
    #-*- coding:Utf-8-*-
     
    from Tkinter import *
    import ttk
     
     
    def center(window):
     
        sw = window.winfo_screenwidth()
        sh = window.winfo_screenheight()
        rw = window.winfo_reqwidth()
        rh = window.winfo_reqheight()
        xc = (sw - rw) / 2
        yc = (sh -rh) / 2
        window.geometry("+%d+%d" % (xc, yc))
        window.deiconify() 
     
    # La fonction inserer ou afficher
     
    def afficher() : 
     
        tv.insert("","end", values=('a', 'a', 'a'))
     
     
    # Linterface :
     
     
    fenetre=Tk()
    fenetre.geometry("700x400")
    fenetre.title('             Test Data')  
     
    firstnamevar = StringVar()
    lastnamevar = StringVar()
    Phonevar = IntVar()
     
    f1 = Frame(fenetre, bg="#290080",  width=500, height=500)
    f1.pack( fill=X, expand=0)
    f2 = Frame(fenetre, bg="white",  width=215, height=135)
    f2.place(x=130 , y=213)
     
    lab1 = Label(fenetre, text="Voila la table testtable de la base testbase" , bg = "#290080", fg = "white" )
    lab1.place ( x=100 , y=15 )
     
    lab2 = Label(fenetre, text="Prénom" , bg = "#290080", fg = "white" )
    lab2.place ( x=30 , y=100 )
    lab3 = Label(fenetre, text="Nom" , bg = "#290080", fg = "white" )
    lab3.place ( x=30 , y=125)
    lab4 = Label(fenetre, text="Phone" , bg = "#290080", fg = "white" )
    lab4.place ( x=30 , y=150)
    lab5 = Label(fenetre, text="Données : " , bg = "#290080", fg = "white" , anchor=W, justify=LEFT)
    lab5.place ( x=30 , y=220)
     
    lab6 = Label(fenetre, text="" , bg = "white", fg = "#290080" , anchor=W, justify=LEFT)
    lab6.place ( x=130 , y=220)
     
    listb=Listbox(fenetre, fg = "#290080", width = "10")
    listb.place(x = 380, y = 215 )
    listb.insert(END, "  Prénom  ")
    listb.itemconfig(0, fg = "black")
     
     
    # Les entrées
     
     
    firstname_entry = ttk.Entry(fenetre, width=15, textvariable=firstnamevar)
    firstname_entry.place (x = 100 , y = 100 )
    lastname_entry = ttk.Entry(fenetre, width=15, textvariable=lastnamevar)
    lastname_entry.place (x = 100 , y = 125 )
    Phone_entry = ttk.Entry(fenetre, width=15, textvariable=Phonevar)
    Phone_entry.place (x = 100 , y = 150 )
    Phonevar.set("")
     
    scrollbar = Scrollbar(fenetre)
    scrollbar.place (x = 670 , y = 170)
     
    # la creation de la TreeView 
     
    tv = ttk.Treeview(fenetre, show='headings',  height =3, yscrollcommand=scrollbar.set)
    tv["columns"]=("col1","col2","col3")
    tv.column("col1",width=80,anchor="center", stretch = True, minwidth = 50)
    tv.column("col2",width=80,anchor="center")
    tv.column("col3",width=110,anchor="center")
    tv.heading("col1",text="Prénom")
    tv.heading("col2",text="Nom")
    tv.heading("col3",text="Phone number")
    tv.place( x = 400 , y = 120)
    scrollbar.config(command=tv.yview)
     
    # Les bouttons 
     
    afficher = Button(fenetre, text = "Afficher" , command = afficher)
    afficher.place( x=290, y=80 )
    inserer = Button(fenetre, text = "Inserer" )
    inserer.place( x=290, y=110 )
    modifier = Button(fenetre, text = "Modifier" ) 
    modifier.place( x=290, y=140 )
    supprimer = Button(fenetre, text = "Supprimer" )
    supprimer.place( x=290, y=170 )
    Quitter = Button(fenetre, text = "Quitter" , command = fenetre.quit)
    Quitter.place( x=200, y=350 )
     
    fenetre.after(0,center,fenetre)
    fenetre.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
    Bonjour,

    Vérifier que votre fichier (le .py) est bien encodé en UTF-8

    @+

  4. #4
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2011
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2011
    Messages : 88
    Par défaut
    Bonjour , merci Pause Kawa , mais je t'ai montré tout le code ... mon fichier est : Tmp74.py , dedans il y a le code que j'ai cité ... en haut j'ai bien mis :

    Car sans cette ligne , je ne peux pas afficher dans mes labels des 'é' ...

  5. #5
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    L'erreur est explicite: quand Python reçoit une chaine qui n'a pas le bon encodage, il fait une conversion. Mais quand on ne lui précise pas l'encodage en question, il considère que c'est de l'ASCII 7 bits...

    Ici, la page de code est écrite en "utf-8" (signalé à la 2ème ligne), et donc, il faut le vérifier, l'éditeur utilisé doit avoir enregistré en 'utf-8'.

    Les caractères accentués écrits "en dur" dans la page ont donc cet encodage. D'ailleurs, le "é" en utf-8 se code en hexa comme c3 a9: on retrouve bien le c3 dans le message d'erreur. Comme l'utf-8 comporte des octets au delà de 127, ça se passe mal.

    => Il faut donc convertir explicitement ces caractères dans le bon encodage pour que Python ne prenne pas l'initiative de les convertir lui-même! Il faut donc chercher à quel endroit se manifeste l'erreur, chercher qu'elle est le bon encodage attendu (latin1? unicode?), et enfin écrire la bonne fonction de conversion.

  6. #6
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2011
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2011
    Messages : 88
    Par défaut
    Bonsoir tyrtamos , merci bien pour tes explications , mais je ne sais pas quoi mettre dans mon code ou où mettre pour que ça s'affiche les "é" ...

  7. #7
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    La méthode "normale", c'est ça:

    Citation Envoyé par tyrtamos Voir le message
    Il faut donc chercher à quel endroit se manifeste l'erreur, chercher qu'elle est le bon encodage attendu (latin1? unicode?), et enfin écrire la bonne fonction de conversion.
    - pister une erreur peut se faire très simplement en ajoutant des print.

    - pour connaitre le bon encodage, il faudrait en savoir plus: Python 2.7 ou Python 3.x? Il y a des choses qui ont changé entre les 2 concernant les encodages. Et savoir ce qu'attend ttk que je ne connais pas.

    - et faire la bonne conversion. Si c'est Python 2.7 et si "é" est en utf-8:

    => si ça doit être de l'unicode: "é".decode('utf-8')
    => si ça doit être du latin1: "é".decode('utf-8').encode('latin1')

    Et tu peux toujours essayer ces encodages "au pif".

  8. #8
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2011
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2011
    Messages : 88
    Par défaut
    Merci bien tyrtamos pour ton suivi , je vai tester tout ça demain matin , car je dois quitter le boulot tout de suite , merci infiniment ami

  9. #9
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2011
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2011
    Messages : 88
    Par défaut
    Ouiii , enfin ça fonctionnait , merci infiniment ami , a demain .

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

Discussions similaires

  1. probleme d'insertion dans une table
    Par metwa dans le forum JBuilder
    Réponses: 1
    Dernier message: 02/05/2008, 21h21
  2. probleme d'insertion dans une table
    Par metwa dans le forum JDBC
    Réponses: 3
    Dernier message: 30/04/2008, 10h38
  3. probleme d'insertion dans une transaction
    Par iam dans le forum Bases de données
    Réponses: 1
    Dernier message: 17/05/2006, 10h18
  4. [interbase6]probleme d'insertion dans une table
    Par macadam314 dans le forum Bases de données
    Réponses: 10
    Dernier message: 22/02/2005, 14h21

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