diff --git a/cave.py b/cave.py index e5275c7..9ceb891 100644 --- a/cave.py +++ b/cave.py @@ -1,41 +1,42 @@ - -import json -from tkinter import * +import json +from tkinter import Scrollbar,Label,LabelFrame,Entry,Button,OptionMenu,StringVar,Canvas,Toplevel,N,S,VERTICAL,Tk class Etageres(object): def __init__(self): self.etageres = [] self.nbetagere = 0 - self.couleur = {"rouge":"red","blanc":"white","rose":"pink","champagne":"yellow"} - + self.couleur = {"rouge": "red", "blanc": "white", + "rose": "pink", "champagne": "yellow"} + @classmethod - def load_etageres(cls,file): + def load_etageres(cls, file): try: with open(file, 'rb') as json_data: - data=json.load(json_data) + data = json.load(json_data) except FileNotFoundError: - print ("no file to load") + 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"]) + 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 + 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 - - newetagere = Etagere(largeur,hauteur,self) + newetagere = Etagere(largeur, hauteur, self) self.etageres.append(newetagere) return newetagere - + def nbbouteille(self): i = 0 for etagere in self.etageres: - for bouteille in etagere: - i += 1 + i += len(etagere.bouteilles) return i @@ -47,23 +48,22 @@ class Etageres(object): i += 1 return i - def remove_etagere(self,num_etagere): + def remove_etagere(self, num_etagere): for etagere in self.etageres: - if etagere.num_etagere==num_etagere: + if etagere.num_etagere == num_etagere: self.etageres.remove(etagere) self.nbetagere -= 1 return 0 return "pas d'étagere a ce numéros" - return "etagere {} suprimer".format(etagere.num_etagere) - def save_etageres(self,file): + def save_etageres(self, file): with open(file, 'w') as output: - data={"etageres":[]} + data = {"etageres": []} for etagere in self.etageres: data["etageres"].append(etagere.save()) print(data) - json.dump(data,output,indent=4) - print ("save ok") + json.dump(data, output, indent=4) + print("save ok") def __iter__(self): return iter(self.etageres) @@ -76,7 +76,6 @@ class Etagere(object): self.hauteur = hauteur self.etageres = etageres self.bouteilles = [] - def add_bouteille(self, pos_largeur, pos_hauteur, couleur, appelation, millesime): if (pos_hauteur > self.hauteur or pos_largeur > self.largeur or pos_hauteur < 0 or pos_largeur < 0): @@ -84,25 +83,24 @@ class Etagere(object): for bouteille in self.bouteilles: if (pos_largeur == bouteille.pos_largeur and pos_hauteur == bouteille.pos_hauteur): return "une bouteille existe déja a cette emplacement" - newbouteille=Bouteille(pos_largeur, pos_hauteur, couleur, appelation, millesime, self) + newbouteille = Bouteille( + pos_largeur, pos_hauteur, couleur, appelation, millesime, self) self.bouteilles.append(newbouteille) return newbouteille - + def remove_bouteille(self, pos_largeur, pos_hauteur): i = 0 for bouteille in self.bouteilles: if (pos_largeur == bouteille.pos_largeur and pos_hauteur == bouteille.pos_hauteur): self.bouteilles.remove(bouteille) - return ( "bouteille suprimé") + return "bouteille suprimé" else: i += 1 - return ( "aucune bouteille troué a cette emplacement") + return "aucune bouteille troué a cette emplacement" - - - def save(self): - data={"largeur": self.largeur,"hauteur": self.hauteur,"bouteilles":[]} + data = {"largeur": self.largeur, + "hauteur": self.hauteur, "bouteilles": []} for bouteille in self.bouteilles: data["bouteilles"].append(bouteille.save()) return data @@ -113,12 +111,13 @@ class Etagere(object): def __iter__(self): return iter(self.bouteilles) + class Bouteille(object): def __init__(self, pos_largeur, pos_hauteur, couleur, appelation, millesime, etagere): self.pos_largeur = pos_largeur self.pos_hauteur = pos_hauteur - + self.couleur = couleur self.millesime = millesime @@ -126,150 +125,163 @@ class Bouteille(object): self.etagere = etagere def save(self): - data={ "pos_largeur" : self.pos_largeur,"pos_hauteur" : self.pos_hauteur, "couleur" : self.couleur, "millesime" : self.millesime,"appelation" : self.appelation} + 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) -class EtageresUI(object): - def __init__(self,etageres): - self.etageres=etageres - self.fenetre=Tk() - self.fenetre.title(string="cave a vin") - self.etageresUI=[] - scrollbar = Scrollbar(self.fenetre,orient=VERTICAL) - scrollbar.grid(column=2,row=1,sticky=N+S) - self.etagere_frame=Canvas(self.fenetre,yscrollcommand=scrollbar.set) - scrollbar.config(command=self.etagere_frame.yview) - for etagere in self.etageres: - self.etageresUI.append(EtagereUI(etagere,self)) - - framecontrol=LabelFrame(self.etagere_frame,text="command pannel") - framecontrol.grid(column=2,row=1) - Button(framecontrol,text="add etagere",command=self.click_add_etagere).pack() - Button(framecontrol,text="remove etagere",command=self.click_remove_etagere).pack() - Button(framecontrol,text="save",command=lambda:self.etageres.save_etageres("cave")).pack() - self.etagere_frame.grid(column=1,row=1) +class EtageresUI(Tk): + def __init__(self, etageres): + Tk.__init__(self) + self.etageres = etageres + self.title(string="cave a vin") + self.etageresUI = [] + vscrollbar = Scrollbar(self, orient=VERTICAL) + self.etagere_frame = Canvas(self, yscrollcommand=vscrollbar.set) + vscrollbar.grid(column=2, row=1, sticky=N+S) + vscrollbar.config(command=self.etagere_frame.yview) + for etagere in self.etageres: + self.etageresUI.append(EtagereUI(etagere, self)) + + framecontrol = LabelFrame(self.etagere_frame, text="command pannel") + framecontrol.grid(column=2, row=1) + Button(framecontrol, text="add etagere", + command=self.click_add_etagere).pack() + Button(framecontrol, text="remove etagere", + command=self.click_remove_etagere).pack() + Button(framecontrol, text="save", + command=lambda: self.etageres.save_etageres("cave")).pack() + self.etagere_frame.grid(column=1, row=1) 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() + child_window = Toplevel(self) + 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() + 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): + Button(child_window, text="OK", command=lambda: add( + largeur.get(), hauteur.get())).pack() + + def add(largeur, hauteur): child_window.destroy() - newetagere=self.etageres.add_etagere(int(largeur),int(hauteur)) - self.etageresUI.append(EtagereUI(newetagere,self)) + newetagere = self.etageres.add_etagere(int(largeur), int(hauteur)) + self.etageresUI.append(EtagereUI(newetagere, self)) def click_remove_etagere(self): - child_window=Toplevel(self.fenetre) - Label(child_window,text="select etagere").pack() - num=StringVar() - Entry(child_window,textvariable=num).pack() - Button(child_window,text="OK",command=lambda:remove(num.get())).pack() + child_window = Toplevel(self) + Label(child_window, text="select etagere").pack() + num = StringVar() + Entry(child_window, textvariable=num).pack() + Button(child_window, text="OK", command=lambda: remove(num.get())).pack() + def remove(num): child_window.destroy() for etagereUI in self.etageresUI: - if etagereUI.etagere.num_etagere== int(num): - print ("find") + if etagereUI.etagere.num_etagere == int(num): + print("find") etagereUI.destroy() self.etageres.remove_etagere(int(num)) - def mainloop(self): - self.fenetre.mainloop() - class EtagereUI(LabelFrame): - def __init__(self,etagere,etageresUI): - LabelFrame.__init__(self,etageresUI.etagere_frame,text=etagere) - self.etagere=etagere - self.etageresUI=etageresUI - + def __init__(self, etagere, etageresUI): + LabelFrame.__init__(self, etageresUI.etagere_frame, text=etagere) + self.etagere = etagere + self.etageresUI = etageresUI + for hauteur in range(self.etagere.hauteur): for largeur in range(self.etagere.largeur): isset = False for bouteille in self.etagere: if (largeur == bouteille.pos_largeur and hauteur == bouteille.pos_hauteur): - BouteilleUI(bouteille,self) + BouteilleUI(bouteille, self) isset = True break - if isset == False: - Cassier_videUI(largeur,hauteur,self) - self.grid(row=self.etagere.num_etagere) - + if not isset: + Cassier_videUI(largeur, hauteur, self) + self.grid(row=self.etagere.num_etagere) - def click_remove_bouteille(self,bouteilleUI): - self.etagere.remove_bouteille(bouteilleUI.bouteille.pos_largeur, bouteilleUI.bouteille.pos_hauteur) + def click_remove_bouteille(self, bouteilleUI): + self.etagere.remove_bouteille( + bouteilleUI.bouteille.pos_largeur, bouteilleUI.bouteille.pos_hauteur) bouteilleUI.destroy() - Cassier_videUI(bouteilleUI.bouteille.pos_largeur,bouteilleUI.bouteille.pos_hauteur,self) - self["text"]=self.etagere - - def click_add_bouteille(self,cassiervide): + Cassier_videUI(bouteilleUI.bouteille.pos_largeur, + bouteilleUI.bouteille.pos_hauteur, self) + self["text"] = self.etagere - child_window=Toplevel(self.etageresUI.fenetre) - Label(child_window,text="select color").pack() - couleur=StringVar() + def click_add_bouteille(self, cassiervide): + + child_window = Toplevel(self.etageresUI) + Label(child_window, text="select color").pack() + couleur = StringVar() couleur.set("rouge") - OptionMenu(child_window,couleur,*self.etageresUI.etageres.couleur.keys()).pack() - - Label(child_window,text="enter millesime").pack() - millesime=StringVar() - Entry(child_window,textvariable=millesime).pack() - - Label(child_window,text="enter appelation").pack() - appelation=StringVar() - Entry(child_window,textvariable=appelation).pack() - - Button(child_window,text="OK",command=lambda:add(cassiervide,couleur.get(),millesime.get(),appelation.get())).pack() + OptionMenu(child_window, couleur, * + self.etageresUI.etageres.couleur.keys()).pack() - def add(cassiervide,couleur,millesime,appelation): + Label(child_window, text="enter millesime").pack() + millesime = StringVar() + Entry(child_window, textvariable=millesime).pack() + + Label(child_window, text="enter appelation").pack() + appelation = StringVar() + Entry(child_window, textvariable=appelation).pack() + + Button(child_window, text="OK", command=lambda: add(cassiervide, + couleur.get(), millesime.get(), appelation.get())).pack() + + def add(cassiervide, couleur, millesime, appelation): child_window.destroy() print(cassiervide.pos_largeur) print(cassiervide.pos_hauteur) - newbouteille=self.etagere.add_bouteille(cassiervide.pos_largeur, cassiervide.pos_hauteur, couleur, appelation, millesime) + newbouteille = self.etagere.add_bouteille( + cassiervide.pos_largeur, cassiervide.pos_hauteur, couleur, appelation, millesime) cassiervide.destroy() - BouteilleUI(newbouteille,self) - self["text"]=self.etagere + BouteilleUI(newbouteille, self) + self["text"] = self.etagere + class Cassier_videUI(Button): - - def __init__(self, pos_largeur, pos_hauteur,etagereUI): - Button.__init__(self,etagereUI,text="cassier vide",command=lambda:self.etagereUI.click_add_bouteille(self)) + + def __init__(self, pos_largeur, pos_hauteur, etagereUI): + Button.__init__(self, etagereUI, text="cassier vide", + command=lambda: self.etagereUI.click_add_bouteille(self)) self.pos_largeur = pos_largeur self.pos_hauteur = pos_hauteur self.etagereUI = etagereUI - self.grid(row=self.pos_hauteur,column=self.pos_largeur) - + self.grid(row=self.pos_hauteur, column=self.pos_largeur) + + class BouteilleUI(Button): - def __init__(self,bouteille,etagereUI): - self.bouteille=bouteille - self.etagereUI=etagereUI - Button.__init__(self,etagereUI,text=self.bouteille,command=lambda:self.etagereUI.click_remove_bouteille(self)) - self["bg"]=self.etagereUI.etageresUI.etageres.couleur[self.bouteille.couleur] - self.grid(row=self.bouteille.pos_hauteur,column=self.bouteille.pos_largeur) + def __init__(self, bouteille, etagereUI): + self.bouteille = bouteille + self.etagereUI = etagereUI + Button.__init__(self, etagereUI, text=self.bouteille, + command=lambda: self.etagereUI.click_remove_bouteille(self)) + self["bg"] = self.etagereUI.etageresUI.etageres.couleur[self.bouteille.couleur] + self.grid(row=self.bouteille.pos_hauteur, + column=self.bouteille.pos_largeur) #new = Etageres.load_etageres("cave") #new =Etageres() #new.add_etagere(10, 3) -#new.add_etagere(4,4) +# 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(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) +# print("vos etagére contiennes {} bouteille de rouge".format( +# new.nbbouteillecouleur("rouge"))) +# print(new.couleur) + EtageresUI(Etageres.load_etageres("cave")).mainloop() -