2018-02-03 16:58:40 +00:00
2018-02-10 18:08:53 +00:00
2018-02-05 21:24:27 +00:00
import pickle
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 ) :
with open ( file , ' rb ' ) as data :
return pickle . load ( data )
2018-02-05 20:16:16 +00:00
def add_etagere ( self , largeur , hauteur ) :
self . nbetagere + = 1
self . etageres . append ( Etagere ( largeur , hauteur , self ) )
2018-02-05 19:58:39 +00:00
2018-02-10 16:26:12 +00:00
def generate_windows ( self ) :
self . fenetre = Tk ( )
for etagere in self . etageres :
etagere . generate_frame ( self . fenetre )
2018-02-10 18:08:53 +00:00
2018-02-10 18:21:07 +00:00
framecontrol = LabelFrame ( self . fenetre , text = " command pannel " )
framecontrol . grid ( column = 2 , row = 1 )
Button ( framecontrol , text = " add etagere " ) . pack ( )
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 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 ) :
with open ( file , ' wb ' ) as output :
2018-02-10 18:49:02 +00:00
pickle . dump ( saveobject , output )
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 ) :
pass
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 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-05 20:16:16 +00:00
new = Etageres ( )
2018-02-10 16:26:12 +00:00
new . add_etagere ( 10 , 3 )
new . add_etagere ( 4 , 4 )
print ( new . etageres [ 0 ] . add_bouteille ( 1 , 1 , " rouge " , " saint emilion " , 2005 ) )
2018-02-10 18:08:53 +00:00
print ( new . etageres [ 0 ] . add_bouteille ( 9 , 1 , " rose " , " gewurtz " , 2010 ) )
2018-02-10 16:26:12 +00:00
print ( new . etageres [ 0 ] . add_bouteille ( 5 , 2 , " rouge " , " saint emilion " , 2006 ) )
2018-02-05 20:16:16 +00:00
print ( new . etageres [ 0 ] . bouteilles )
2018-02-10 16:26:12 +00:00
2018-02-05 20:16:16 +00:00
print ( " vos etagére contiennes {} bouteille " . format ( new . nbbouteille ( ) ) )
print ( " vos etagére contiennes {} bouteille de rouge " . format (
2018-02-10 16:26:12 +00:00
new . nbbouteillecouleur ( " rouge " ) ) )
2018-02-05 21:24:27 +00:00
print ( new . couleur )
2018-02-10 16:26:12 +00:00
new . generate_windows ( )
new . mainloop ( )