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