| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 
 | #coding:cp1252
 
# affiche une boîte de dialogue simple : 
#  - une listbox contenant un texte de quelques lignes 
#  - des boutons qui lancent des actions sur ce texte
def main_menu ( lines,buttons ):
    import Tkinter
    root = Tkinter.Tk()
    # la listbox
    listbox = Tkinter.Listbox( root )
    for f in lines : listbox.insert( Tkinter.END,f )
    listbox.pack()
    # les boutons = paires ( libélé , fonction )
    for name,func in buttons :
        print name,func # quelques traces pour vérifier
        butt = Tkinter.Button( root,text = name,command = lambda : func( lines ))
        butt.pack()
    # et c'est parti !
    root.mainloop()
 
def message ( *t ) : # ch'tite fonction qui ne fait pas grand chose... 
    print t
 
# 10 lignes de texte sans intèret
lines = ['-- %d '%i+'-'*i for i in xrange( 10 )]
 
# liste de paires ( libellé du bouton , fonction associée )]
buttons  = [('button %d'%i , lambda l : message( 'Button %d'%i,l[i:i+2] )) for i in xrange( 5 )]
 
# appel du dialog
main_menu( lines,buttons ) #---> tous les boutons lancent la même fonction (la dernière)
 
# peut-être qu'il n'aime pas un tableau de lambdas construites à la volée ?
# Ok, je définis mes fonctions une par une :  
def s1 ( l ) : message( 's1',l[0] )
def s2 ( l ) : message( 's2',l[0:2] )
def s3 ( l ) : message( 's3',l[1:5] )
buttons2 = [('s1',s1),('s2',s2),('s3',s3)]
main_menu( lines,buttons2 ) #---> idem !!! | 
Partager