diff --git a/cave.py b/cave.py index 2e7f38c..2b6993b 100644 --- a/cave.py +++ b/cave.py @@ -1,6 +1,6 @@ -import pickle +import json from tkinter import * class Etageres(object): @@ -11,21 +11,60 @@ class Etageres(object): @classmethod def load_etageres(cls,file): - with open(file, 'rb') as data: - return pickle.load(data) + try: + with open(file, 'rb') as json_data: + data=json.load(json_data) + except FileNotFoundError: + print ("no file to load") + return Etageres() + loadobj=Etageres() + for etagere in data["etageres"]: + print("etagere:") + print (etagere) + loadobj.add_etagere(etagere["largeur"],etagere["hauteur"]) + for bouteille in etagere["bouteilles"]: + loadobj.etageres[loadobj.nbetagere-1].add_bouteille(bouteille["pos_largeur"],bouteille["pos_hauteur"],bouteille["couleur"],bouteille["millesime"],bouteille["appelation"]) + return loadobj + + + def add_etagere(self, largeur, hauteur): self.nbetagere += 1 - self.etageres.append(Etagere(largeur, hauteur, self)) + self.etageres.append(Etagere (largeur, hauteur, self)) + + def click_add_etagere(self): + + child_window=Toplevel(self.fenetre) + Label(child_window,text="select largeur").pack() + largeur=StringVar() + Entry(child_window,textvariable=largeur).pack() + + Label(child_window,text="hauteur").pack() + hauteur=StringVar() + Entry(child_window,textvariable=hauteur).pack() + + Button(child_window,text="OK",command=lambda:add(largeur.get(),hauteur.get())).pack() + + def add(largeur,hauteur): + child_window.destroy() + self.nbetagere += 1 + newetagere=Etagere(int(largeur),int(hauteur),self) + + self.etageres.append(newetagere) + newetagere.generate_frame(self.fenetre) + + def generate_windows(self): self.fenetre=Tk() + self.fenetre.title(string="cave a vin") for etagere in self.etageres: etagere.generate_frame(self.fenetre) framecontrol=LabelFrame(self.fenetre,text="command pannel") framecontrol.grid(column=2,row=1) - Button(framecontrol,text="add etagere").pack() + Button(framecontrol,text="add etagere",command=lambda:self.click_add_etagere()).pack() Button(framecontrol,text="remove etagere").pack() Button(framecontrol,text="save",command=lambda:self.save_etageres("cave")).pack() @@ -55,9 +94,12 @@ class Etageres(object): return "etagere {} suprimer".format(etagere.num_etagere) def save_etageres(self,file): - with open(file, 'wb') as output: - - pickle.dump(saveobject,output) + with open(file, 'w') as output: + data={"etageres":[]} + for etagere in self.etageres: + data["etageres"].append(etagere.save()) + print(data) + json.dump(data,output,indent=4) print ("save ok") def __iter__(self): @@ -143,7 +185,11 @@ class Etagere(object): self.frame["text"]=self def save(self): - pass + data={"largeur": self.largeur,"hauteur": self.hauteur,"bouteilles":[]} + for bouteille in self.bouteilles: + data["bouteilles"].append(bouteille.save()) + return data + def __repr__(self): return "etagére numéros {} de largeur {} et de hauteur {} et contient {} bouteille(s) ".format(self.num_etagere, self.largeur, self.hauteur, len(self.bouteilles)) @@ -182,23 +228,25 @@ class Bouteille(object): def save(self): data={ "pos_largeur" : self.pos_largeur,"pos_hauteur" : self.pos_hauteur, "couleur" : self.couleur, "millesime" : self.millesime,"appelation" : self.appelation} return data + def __repr__(self): return "{},{} \n".format(self.appelation, self.millesime) -new = Etageres() -new.add_etagere(10, 3) -new.add_etagere(4,4) -print(new.etageres[0].add_bouteille(1, 1, "rouge", "saint emilion", 2005)) -print(new.etageres[0].add_bouteille(9, 1, "rose", "gewurtz", 2010)) -print(new.etageres[0].add_bouteille(5, 2, "rouge", "saint emilion", 2006)) - -print(new.etageres[0].bouteilles) - -print("vos etagére contiennes {} bouteille".format(new.nbbouteille())) -print("vos etagére contiennes {} bouteille de rouge".format( -new.nbbouteillecouleur("rouge"))) - -print(new.couleur) +new = Etageres.load_etageres("cave") +#new =Etageres() +#new.add_etagere(10, 3) +#new.add_etagere(4,4) +#print(new.etageres[0].add_bouteille(1, 1, "rouge", "saint emilion", 2005)) +#print(new.etageres[0].add_bouteille(9, 1, "rose", "gewurtz", 2010)) +#print(new.etageres[0].add_bouteille(5, 2, "rouge", "saint emilion", 2006)) +# +#print(new.etageres[0].bouteilles) +# +#print("vos etagére contiennes {} bouteille".format(new.nbbouteille())) +#print("vos etagére contiennes {} bouteille de rouge".format( +#new.nbbouteillecouleur("rouge"))) +# +#print(new.couleur) new.generate_windows() new.mainloop()