1 2 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