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-11 12:00:18 +00:00
self . couleur = { " rouge " : " red " , " blanc " : " white " , " rose " : " pink " , " champagne " : " yellow " }
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 " ] )
2018-02-11 12:00:18 +00:00
return loadobj
2018-02-05 20:16:16 +00:00
def add_etagere ( self , largeur , hauteur ) :
self . nbetagere + = 1
2018-02-10 18:08:53 +00:00
2018-02-11 12:00:18 +00:00
newetagere = Etagere ( largeur , hauteur , self )
self . etageres . append ( newetagere )
return newetagere
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
2018-02-11 12:00:18 +00:00
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 "
2018-02-05 20:16:16 +00:00
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 = [ ]
2018-02-11 12:00:18 +00:00
2018-02-05 20:16:16 +00:00
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 "
2018-02-11 12:00:18 +00:00
newbouteille = Bouteille ( pos_largeur , pos_hauteur , couleur , appelation , millesime , self )
self . bouteilles . append ( newbouteille )
return newbouteille
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-11 12:00:18 +00:00
def save ( self ) :
data = { " largeur " : self . largeur , " hauteur " : self . hauteur , " bouteilles " : [ ] }
for bouteille in self . bouteilles :
data [ " bouteilles " ] . append ( bouteille . save ( ) )
return data
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 )
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 save ( self ) :
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 )
2018-02-10 16:26:12 +00:00
2018-02-11 12:00:18 +00:00
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 ) :
2018-02-10 16:26:12 +00:00
isset = False
2018-02-11 12:00:18 +00:00
for bouteille in self . etagere :
2018-02-10 16:26:12 +00:00
if ( largeur == bouteille . pos_largeur and hauteur == bouteille . pos_hauteur ) :
2018-02-11 12:00:18 +00:00
BouteilleUI ( bouteille , self )
2018-02-10 16:26:12 +00:00
isset = True
break
if isset == False :
2018-02-11 12:00:18 +00:00
Cassier_videUI ( largeur , hauteur , self )
self . frame . grid ( row = self . etagere . num_etagere )
2018-02-10 16:26:12 +00:00
2018-02-11 12:00:18 +00:00
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
2018-02-10 16:26:12 +00:00
def click_add_bouteille ( self , cassiervide ) :
2018-02-11 12:00:18 +00:00
child_window = Toplevel ( self . etageresUI . fenetre )
2018-02-10 18:08:53 +00:00
Label ( child_window , text = " select color " ) . pack ( )
couleur = StringVar ( )
couleur . set ( " rouge " )
2018-02-11 12:00:18 +00:00
OptionMenu ( child_window , couleur , * self . etageresUI . etageres . couleur . keys ( ) ) . pack ( )
2018-02-10 18:08:53 +00:00
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 ( )
2018-02-11 12:00:18 +00:00
newbouteille = self . etagere . add_bouteille ( cassiervide . pos_largeur , cassiervide . pos_hauteur , couleur , appelation , millesime )
2018-02-10 18:21:07 +00:00
cassiervide . boutton . destroy ( )
2018-02-10 18:08:53 +00:00
del cassiervide
2018-02-11 12:00:18 +00:00
BouteilleUI ( newbouteille , self )
self . frame [ " text " ] = self . etagere
2018-02-10 16:26:12 +00:00
2018-02-11 12:00:18 +00:00
class Cassier_videUI ( object ) :
2018-02-10 16:26:12 +00:00
2018-02-11 12:00:18 +00:00
def __init__ ( self , pos_largeur , pos_hauteur , etagereUI ) :
2018-02-10 16:26:12 +00:00
self . pos_largeur = pos_largeur
self . pos_hauteur = pos_hauteur
2018-02-11 12:00:18 +00:00
self . etagereUI = etagereUI
self . boutton = Button ( etagereUI . frame , text = " cassier vide " , command = lambda : self . etagereUI . click_add_bouteille ( self ) )
2018-02-10 16:26:12 +00:00
self . boutton . grid ( row = self . pos_hauteur , column = self . pos_largeur )
2018-02-11 12:00:18 +00:00
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 )
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-11 12:00:18 +00:00
EtageresUI ( Etageres . load_etageres ( " cave " ) ) . mainloop ( )