From 2b081d3d8bcf12996eb4b38d9ac3e404b3456bf3 Mon Sep 17 00:00:00 2001 From: vincent Date: Sun, 11 Feb 2018 13:00:18 +0100 Subject: [PATCH] separation UI core --- cave.py | 271 ++++++++++++++++++++++++++++++-------------------------- 1 file changed, 146 insertions(+), 125 deletions(-) diff --git a/cave.py b/cave.py index c8a7051..e51ab33 100644 --- a/cave.py +++ b/cave.py @@ -6,7 +6,7 @@ class Etageres(object): def __init__(self): self.etageres = [] self.nbetagere = 0 - self.couleur = {"rouge":"red","blanc":"white","rose":"pink"} + self.couleur = {"rouge":"red","blanc":"white","rose":"pink","champagne":"yellow"} @classmethod def load_etageres(cls,file): @@ -23,57 +23,14 @@ class Etageres(object): 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 - - - - + return loadobj def add_etagere(self, largeur, hauteur): self.nbetagere += 1 - 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.etagere_frame) - - - - def generate_windows(self): - self.fenetre=Tk() - self.fenetre.title(string="cave a vin") - - self.etagere_frame=Frame(self.fenetre) - for etagere in self.etageres: - etagere.generate_frame(self.etagere_frame) - - framecontrol=LabelFrame(self.etagere_frame,text="command pannel") - framecontrol.grid(column=2,row=1) - 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() - self.etagere_frame.grid(column=1,row=1) - scrollbar = Scrollbar(self.fenetre,orient=VERTICAL) - scrollbar.grid(column=2,row=1,sticky=N+S) - def mainloop(self): - self.fenetre.mainloop() - + newetagere = Etagere(largeur,hauteur,self) + self.etageres.append(newetagere) + return newetagere + def nbbouteille(self): i = 0 for etagere in self.etageres: @@ -90,10 +47,13 @@ class Etageres(object): i += 1 return i - def remove_etagere(self, etagere): - self.etageres.remove(etagere) - - self.nbetagere -= 1 + def remove_etagere(self,num_etagere): + for etagere in self.etageres: + 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): @@ -116,6 +76,7 @@ class Etagere(object): self.hauteur = hauteur self.etageres = etageres self.bouteilles = [] + def add_bouteille(self, pos_largeur, pos_hauteur, couleur, appelation, millesime): for bouteille in self.bouteilles: @@ -123,10 +84,10 @@ class Etagere(object): return "bouteille positioné en dehors des emplacement" if (pos_largeur == bouteille.pos_largeur and pos_hauteur == bouteille.pos_hauteur): return "une bouteille existe déja a cette emplacement" - - self.bouteilles.append(Bouteille(pos_largeur, pos_hauteur, couleur, appelation, millesime, self)) - return "OK" - + 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: @@ -137,56 +98,9 @@ class Etagere(object): i += 1 return ( "aucune bouteille troué a cette emplacement") - def generate_frame(self,root): - - self.frame=LabelFrame(root,text=self) - for hauteur in range(self.hauteur): - for largeur in range(self.largeur): - isset = False - for bouteille in self: - if (largeur == bouteille.pos_largeur and hauteur == bouteille.pos_hauteur): - bouteille.generate_boutton(self.frame) - isset = True - break - if isset == False: - Cassier_vide(largeur,hauteur,self) - self.frame.grid(row=self.num_etagere) - - - def click_remove_bouteille(self,bouteille): - self.remove_bouteille(bouteille.pos_largeur, bouteille.pos_hauteur) - bouteille.boutton.destroy() - Cassier_vide(bouteille.pos_largeur,bouteille.pos_hauteur,self) - self.frame["text"]=self - - - def click_add_bouteille(self,cassiervide): - - child_window=Toplevel(self.etageres.fenetre) - Label(child_window,text="select color").pack() - couleur=StringVar() - couleur.set("rouge") - OptionMenu(child_window,couleur,*self.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() - - def add(cassiervide,couleur,millesime,appelation): - child_window.destroy() - newbouteille=Bouteille(cassiervide.pos_largeur, cassiervide.pos_hauteur, couleur, appelation, millesime, self) - self.bouteilles.append(newbouteille) - cassiervide.boutton.destroy() - del cassiervide - newbouteille.generate_boutton(self.frame) - self.frame["text"]=self + + def save(self): data={"largeur": self.largeur,"hauteur": self.hauteur,"bouteilles":[]} for bouteille in self.bouteilles: @@ -199,16 +113,6 @@ class Etagere(object): def __iter__(self): return iter(self.bouteilles) -class Cassier_vide(object): - - def __init__(self, pos_largeur, pos_hauteur,etagere): - self.pos_largeur = pos_largeur - self.pos_hauteur = pos_hauteur - self.etagere = etagere - self.boutton=Button(etagere.frame,text="cassier vide",command=lambda:self.etagere.click_add_bouteille(self)) - self.boutton.grid(row=self.pos_hauteur,column=self.pos_largeur) - - class Bouteille(object): def __init__(self, pos_largeur, pos_hauteur, couleur, appelation, millesime, etagere): @@ -221,13 +125,6 @@ class Bouteille(object): self.appelation = appelation self.etagere = etagere - def generate_boutton(self,frame): - - self.boutton=Button(frame,text=self,command=lambda:self.etagere.click_remove_bouteille(self)) - self.boutton["bg"]=self.etagere.etageres.couleur[self.couleur] - self.boutton.grid(row=self.pos_hauteur,column=self.pos_largeur) - - 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 @@ -235,6 +132,129 @@ class Bouteille(object): 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=[] + self.etagere_frame=Frame(self.fenetre) + 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) + scrollbar = Scrollbar(self.fenetre,orient=VERTICAL) + scrollbar.grid(column=2,row=1,sticky=N+S) + + 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() + 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() + def remove(num): + child_window.destroy() + for etagereUI in self.etageresUI: + if etagereUI.etagere.num_etagere== int(num): + print ("find") + etagereUI.frame.destroy() + del etagereUI + self.etageres.remove_etagere(int(num)) + + + + def mainloop(self): + self.fenetre.mainloop() + +class EtagereUI(object): + def __init__(self,etagere,etageresUI): + self.etagere=etagere + self.etageresUI=etageresUI + self.frame=LabelFrame(self.etageresUI.etagere_frame,text=self.etagere) + 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) + isset = True + break + if isset == False: + Cassier_videUI(largeur,hauteur,self) + self.frame.grid(row=self.etagere.num_etagere) + + + def click_remove_bouteille(self,bouteilleUI): + self.etagere.remove_bouteille(bouteilleUI.bouteille.pos_largeur, bouteilleUI.bouteille.pos_hauteur) + bouteilleUI.boutton.destroy() + Cassier_videUI(bouteilleUI.bouteille.pos_largeur,bouteilleUI.bouteille.pos_hauteur,self) + self.frame["text"]=self.etagere + + def click_add_bouteille(self,cassiervide): + + child_window=Toplevel(self.etageresUI.fenetre) + 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() + + def add(cassiervide,couleur,millesime,appelation): + child_window.destroy() + newbouteille=self.etagere.add_bouteille(cassiervide.pos_largeur, cassiervide.pos_hauteur, couleur, appelation, millesime) + cassiervide.boutton.destroy() + del cassiervide + BouteilleUI(newbouteille,self) + self.frame["text"]=self.etagere + +class Cassier_videUI(object): + + def __init__(self, pos_largeur, pos_hauteur,etagereUI): + self.pos_largeur = pos_largeur + self.pos_hauteur = pos_hauteur + self.etagereUI = etagereUI + self.boutton=Button(etagereUI.frame,text="cassier vide",command=lambda:self.etagereUI.click_add_bouteille(self)) + self.boutton.grid(row=self.pos_hauteur,column=self.pos_largeur) + +class BouteilleUI(object): + def __init__(self,bouteille,etagereUI): + self.bouteille=bouteille + self.etagereUI=etagereUI + self.boutton=Button(etagereUI.frame,text=self.bouteille,command=lambda:self.etagereUI.click_remove_bouteille(self)) + self.boutton["bg"]=self.etagereUI.etageresUI.etageres.couleur[self.bouteille.couleur] + self.boutton.grid(row=self.bouteille.pos_hauteur,column=self.bouteille.pos_largeur) + new = Etageres.load_etageres("cave") #new =Etageres() #new.add_etagere(10, 3) @@ -247,5 +267,6 @@ new = Etageres.load_etageres("cave") #print("vos etagére contiennes {} bouteille de rouge".format( #new.nbbouteillecouleur("rouge"))) #print(new.couleur) -new.generate_windows() -new.mainloop() + +EtageresUI(Etageres.load_etageres("cave")).mainloop() +