194 lines
6.6 KiB
Python
194 lines
6.6 KiB
Python
|
|
|
|
import pickle
|
|
from tkinter import *
|
|
|
|
class Etageres(object):
|
|
def __init__(self):
|
|
self.etageres = []
|
|
self.nbetagere = 0
|
|
self.couleur = {"rouge":"red","blanc":"white","rose":"pink"}
|
|
|
|
@classmethod
|
|
def load_etageres(cls,file):
|
|
with open(file, 'rb') as data:
|
|
return pickle.load(data)
|
|
|
|
def add_etagere(self, largeur, hauteur):
|
|
self.nbetagere += 1
|
|
self.etageres.append(Etagere(largeur, hauteur, self))
|
|
|
|
def generate_windows(self):
|
|
self.fenetre=Tk()
|
|
for etagere in self.etageres:
|
|
etagere.generate_frame(self.fenetre)
|
|
|
|
framecontrol=Frame(self.fenetre)
|
|
framecontrol.grid(column=2)
|
|
|
|
def mainloop(self):
|
|
self.fenetre.mainloop()
|
|
|
|
def nbbouteille(self):
|
|
i = 0
|
|
for etagere in self.etageres:
|
|
for bouteille in etagere:
|
|
i += 1
|
|
|
|
return i
|
|
|
|
def nbbouteillecouleur(self, couleur):
|
|
i = 0
|
|
for etagere in self.etageres:
|
|
for bouteille in etagere:
|
|
if bouteille.couleur == couleur:
|
|
i += 1
|
|
return i
|
|
|
|
def remove_etagere(self, etagere):
|
|
self.etageres.remove(etagere)
|
|
|
|
self.nbetagere -= 1
|
|
|
|
return "etagere {} suprimer".format(etagere.num_etagere)
|
|
def save_etageres(self,file):
|
|
with open(file, 'wb') as output:
|
|
pickle.dump(self,output)
|
|
|
|
def __iter__(self):
|
|
return iter(self.etageres)
|
|
|
|
|
|
class Etagere(object):
|
|
def __init__(self, largeur, hauteur, etageres):
|
|
self.num_etagere = etageres.nbetagere
|
|
self.largeur = largeur
|
|
self.hauteur = hauteur
|
|
self.etageres = etageres
|
|
self.bouteilles = []
|
|
|
|
def add_bouteille(self, pos_largeur, pos_hauteur, couleur, appelation, millesime):
|
|
for bouteille in self.bouteilles:
|
|
if (pos_hauteur > self.hauteur or pos_largeur > self.largeur or pos_largeur < 1 or pos_largeur < 1):
|
|
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"
|
|
|
|
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é")
|
|
else:
|
|
i += 1
|
|
return ( "aucune bouteille troué a cette emplacement")
|
|
|
|
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))
|
|
|
|
def __iter__(self):
|
|
return iter(self.bouteilles)
|
|
|
|
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)
|
|
del cassiervide
|
|
newbouteille.generate_boutton(self.frame)
|
|
self.frame["text"]=self
|
|
|
|
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):
|
|
self.pos_largeur = pos_largeur
|
|
self.pos_hauteur = pos_hauteur
|
|
|
|
self.couleur = couleur
|
|
|
|
self.millesime = millesime
|
|
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 __repr__(self):
|
|
return "couleur {} ,appelation {}, millesime {} \n".format( self.couleur,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.generate_windows()
|
|
new.mainloop()
|