2018-02-03 16:58:40 +00:00
2018-02-10 20:45:11 +00:00
import json
2018-02-10 16:26:12 +00:00
from tkinter import *
2018-02-05 21:24:27 +00:00
2018-02-03 18:22:49 +00:00
class Etageres ( object ) :
2018-02-03 16:58:40 +00:00
def __init__ ( self ) :
2018-02-05 20:16:16 +00:00
self . etageres = [ ]
self . nbetagere = 0
2018-02-10 18:08:53 +00:00
self . couleur = { " rouge " : " red " , " blanc " : " white " , " rose " : " pink " }
2018-02-05 20:52:28 +00:00
@classmethod
def load_etageres ( cls , file ) :
2018-02-10 20:45:11 +00:00
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
2018-02-05 20:52:28 +00:00
2018-02-05 20:16:16 +00:00
def add_etagere ( self , largeur , hauteur ) :
self . nbetagere + = 1
2018-02-10 20:45:11 +00:00
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 )
2018-02-05 19:58:39 +00:00
2018-02-10 16:26:12 +00:00
def generate_windows ( self ) :
self . fenetre = Tk ( )
2018-02-10 20:45:11 +00:00
self . fenetre . title ( string = " cave a vin " )
2018-02-10 21:16:46 +00:00
etagere_frame = Frame ( self . fenetre )
2018-02-10 16:26:12 +00:00
for etagere in self . etageres :
2018-02-10 21:16:46 +00:00
etagere . generate_frame ( etagere_frame )
2018-02-10 18:08:53 +00:00
2018-02-10 21:16:46 +00:00
framecontrol = LabelFrame ( etagere_frame , text = " command pannel " )
2018-02-10 18:21:07 +00:00
framecontrol . grid ( column = 2 , row = 1 )
2018-02-10 20:45:11 +00:00
Button ( framecontrol , text = " add etagere " , command = lambda : self . click_add_etagere ( ) ) . pack ( )
2018-02-10 18:21:07 +00:00
Button ( framecontrol , text = " remove etagere " ) . pack ( )
2018-02-10 18:49:02 +00:00
Button ( framecontrol , text = " save " , command = lambda : self . save_etageres ( " cave " ) ) . pack ( )
2018-02-10 21:16:46 +00:00
etagere_frame . grid ( column = 1 , row = 1 )
scrollbar = Scrollbar ( self . fenetre , orient = VERTICAL )
scrollbar . grid ( column = 2 , row = 1 , sticky = N + S )
2018-02-10 16:26:12 +00:00
def mainloop ( self ) :
self . fenetre . mainloop ( )
2018-02-05 20:16:16 +00:00
def nbbouteille ( self ) :
i = 0
2018-02-05 19:58:39 +00:00
for etagere in self . etageres :
2018-02-05 20:16:16 +00:00
for bouteille in etagere :
2018-02-05 19:58:39 +00:00
i + = 1
2018-02-05 20:16:16 +00:00
2018-02-05 19:58:39 +00:00
return i
2018-02-05 20:16:16 +00:00
def nbbouteillecouleur ( self , couleur ) :
2018-02-05 19:58:39 +00:00
i = 0
for etagere in self . etageres :
2018-02-05 20:16:16 +00:00
for bouteille in etagere :
if bouteille . couleur == couleur :
i + = 1
2018-02-05 19:58:39 +00:00
return i
2018-02-05 20:16:16 +00:00
def remove_etagere ( self , etagere ) :
self . etageres . remove ( etagere )
self . nbetagere - = 1
return " etagere {} suprimer " . format ( etagere . num_etagere )
2018-02-05 21:24:27 +00:00
def save_etageres ( self , file ) :
2018-02-10 20:45:11 +00:00
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 )
2018-02-10 18:49:02 +00:00
print ( " save ok " )
2018-02-05 20:16:16 +00:00
2018-02-05 19:58:39 +00:00
def __iter__ ( self ) :
return iter ( self . etageres )
2018-02-03 16:58:40 +00:00
2018-02-03 18:22:49 +00:00
class Etagere ( object ) :
2018-02-05 20:16:16 +00:00
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 ) :
2018-02-05 19:58:39 +00:00
for bouteille in self . bouteilles :
2018-02-05 20:16:16 +00:00
if ( pos_hauteur > self . hauteur or pos_largeur > self . largeur or pos_largeur < 1 or pos_largeur < 1 ) :
2018-02-05 19:58:39 +00:00
return " bouteille positioné en dehors des emplacement "
2018-02-05 20:52:28 +00:00
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 ) )
2018-02-05 19:58:39 +00:00
return " OK "
2018-02-03 18:22:49 +00:00
2018-02-05 20:16:16 +00:00
def remove_bouteille ( self , pos_largeur , pos_hauteur ) :
i = 0
2018-02-05 19:58:39 +00:00
for bouteille in self . bouteilles :
2018-02-05 20:16:16 +00:00
if ( pos_largeur == bouteille . pos_largeur and pos_hauteur == bouteille . pos_hauteur ) :
2018-02-05 19:58:39 +00:00
self . bouteilles . remove ( bouteille )
2018-02-10 16:26:12 +00:00
return ( " bouteille suprimé " )
2018-02-05 19:58:39 +00:00
else :
i + = 1
2018-02-10 16:26:12 +00:00
return ( " aucune bouteille troué a cette emplacement " )
2018-02-03 18:22:49 +00:00
2018-02-10 16:26:12 +00:00
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 ) :
2018-02-10 18:08:53 +00:00
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 )
2018-02-10 18:21:07 +00:00
cassiervide . boutton . destroy ( )
2018-02-10 18:08:53 +00:00
del cassiervide
newbouteille . generate_boutton ( self . frame )
self . frame [ " text " ] = self
2018-02-10 16:26:12 +00:00
2018-02-10 18:49:02 +00:00
def save ( self ) :
2018-02-10 20:45:11 +00:00
data = { " largeur " : self . largeur , " hauteur " : self . hauteur , " bouteilles " : [ ] }
for bouteille in self . bouteilles :
data [ " bouteilles " ] . append ( bouteille . save ( ) )
return data
2018-02-10 18:49:02 +00:00
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 )
2018-02-10 16:26:12 +00:00
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 )
2018-02-05 20:16:16 +00:00
2018-02-03 18:22:49 +00:00
class Bouteille ( object ) :
2018-02-05 20:16:16 +00:00
def __init__ ( self , pos_largeur , pos_hauteur , couleur , appelation , millesime , etagere ) :
self . pos_largeur = pos_largeur
self . pos_hauteur = pos_hauteur
2018-02-05 21:24:27 +00:00
2018-02-05 20:16:16 +00:00
self . couleur = couleur
2018-02-05 21:24:27 +00:00
2018-02-05 20:16:16 +00:00
self . millesime = millesime
self . appelation = appelation
self . etagere = etagere
2018-02-03 16:58:40 +00:00
2018-02-10 16:26:12 +00:00
def generate_boutton ( self , frame ) :
2018-02-05 18:37:13 +00:00
2018-02-10 16:26:12 +00:00
self . boutton = Button ( frame , text = self , command = lambda : self . etagere . click_remove_bouteille ( self ) )
2018-02-10 18:08:53 +00:00
self . boutton [ " bg " ] = self . etagere . etageres . couleur [ self . couleur ]
2018-02-10 16:26:12 +00:00
self . boutton . grid ( row = self . pos_hauteur , column = self . pos_largeur )
2018-02-10 18:49:02 +00:00
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
2018-02-10 20:45:11 +00:00
2018-02-10 16:26:12 +00:00
def __repr__ ( self ) :
2018-02-10 18:21:07 +00:00
return " {} , {} \n " . format ( self . appelation , self . millesime )
2018-02-05 18:37:13 +00:00
2018-02-10 20:45:11 +00:00
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)
2018-02-10 16:26:12 +00:00
new . generate_windows ( )
new . mainloop ( )