tri supression poroblémé

This commit is contained in:
vincent 2018-02-11 19:20:16 +01:00
parent 357df063b7
commit 9ffee40a54

236
cave.py
View File

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