Bonjour,

J'ai une grosse partie de code et dans une partie qui utilise la partie de code ci-dessous. Quand j'exécute le code sans la méthode add_score, tout se passe bien. Quand je l'exécute avec la méthode, y'a une erreur très bizarre qui est relevée et je ne la comprends pas. Je ne vois aucune erreur dans le code pourtant, je ne comprends pas pourquoi ca ne marche pas.


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
 
from tkinter import *
import pickle
import os
 
class Window(Tk):
    def __init__(self):
        Tk.__init__(self)
        self.__entry=Entry(self)
        self.__text1=Label(self,text="Entrez votre nom : ")
        self.__text2=Label(self)
        self.__make_zero=Button(self,text="Reinitialiser score",command=self.make_zero)
 
        self.__entry.grid(row=0,column=1)
        self.__text1.grid(row=0,column=0)
        self.__text2.grid(row=1)
        self.__make_zero.grid(row=2)
 
        self.__entry.bind("<Return>", self.give_informations)
 
    def give_informations(self,event):
 
        if os.path.exists("informations"):
            #self.add_score(50)
            with open("informations","rb") as f:
                mon_depickler=pickle.Unpickler(f)
                d=mon_depickler.load() 
            if self.__entry.get() in d.keys():
                self.__text2.configure(text="Votre score est : "+str(d[self.__entry.get()]))
            else:
                d[self.__entry.get()]=0
                with open("informations","wb") as f:
                    mon_pickler=pickle.Pickler(f)
                    mon_pickler.dump(d)
                self.__text2.configure(text="Votre score est : 0")
        else:
            joueur=self.__entry.get()
            with open("informations","wb") as f:
                mon_pickler=pickle.Pickler(f)
                mon_pickler.dump({joueur:0})
            self.__text2.configure(text="Votre score est : 0")
 
    def make_zero(self):
        with open("informations","rb") as f:
            mon_depickler=pickle.Unpickler(f)
            d=mon_depickler.load()
        d[self.__entry.get()]=0
        with open("informations","wb") as f:
            mon_pickler=pickle.Pickler(f)
            mon_pickler.dump(d)
        self.__text2.configure(text="Votre score est : 0")
 
    def add_score(self,score):
        with open("informations","rb") as f:
            mon_depickler=pickle.Unpickler(f)
            d=mon_depickler.load()
        s=score+d[self.__entry.get()]
        d[self.__entry.get()]=s
        with open("informations","wb") as f:
            mon_pickler=pickle.Pickler(f)
            mon_pickler.dump(d)
        texte="Votre score est : "+str(s)
        self.__text2.configure(self,text=texte)
 
if __name__ == "__main__" :
    win= Window()
    win.mainloop()
Comme ca le code il marche bien, tout est comme voulu. Quand j'enlève le # pour mettre en évidence l'effet de add_score j'ai le problème suivant quand je rentre un nom dans le widget Entry correspondant à self.__entry :

Exception in Tkinter callback
Traceback (most recent call last):
File "c:\users\utilisateur\appdata\local\programs\python\python37-32\lib\tkinter\__init__.py", line 1705, in __call__
return self.func(*args)
File "<tmp 1>", line 25, in give_informations
self.add_score(50)
File "c:\users\utilisateur\appdata\local\programs\python\python37-32\lib\tkinter\__init__.py", line 2101, in __getattr__
return getattr(self.tk, attr)
AttributeError: '_tkinter.tkapp' object has no attribute 'add_score'


Et ce n'est pas un problème qui vient du fait que le fichier peut être vide puisqu'il contient déjà un dictionnaire avec des noms et des scores.

J'espère que vous pourrez m'aider à repérer l'erreur. J'y ai réfléchi pendant longtemps et je ne comprends toujours pas pourquoi qu'est-ce qu'il se passe.

Merci par avance.