[Python3] tkinter: Scale Comment faire passer un argument

tkinter: Scale Comment faire passer un argument [Python3] - Python - Programmation

Marsh Posté le 06-03-2010 à 17:12:35    

Hello,
 
ça fait un petit moment que je met tranquillement à python et je commence à toucher à tkinter pour faire des interfaces graphiques.  
 
J'arrive vers la fin du livre "Head First Programming: A Learner’s Guide to Programming Using the Python Language" (que je trouve vraiment un peu léger au niveau des explications du langages python soit dit en passant...) où il y a un exemple avec un mixer audio.
 
Je me suis un peu amuser à modifier mon programme de base pour lui rajouter plusieurs piste (track) séparé. Chaque piste à un élément Scale qui doit permettre de régler le volume de la piste en question et une checkbox qui permet de jouer ou stopper la piste en question.
 
Mon problème c'est que l'argument "command=" qui est définie pour ces deux éléments (scale et checkbox) ne permet pas de faire passer des arguments.
En fait j'ai réussit à trouver une solution sur le net pour faire passer un argument pour ma checkbox:
 
command= lambda i=number_of_track: flip_it(i)
 
Ceci me permet de passer l'argument "number_of_track" à ma fonction flip_it. (Je comprend pas très bien le fonctionnement de lambda à vrai dire mais bon...) Ceci fonctionne sans problème avec ma checkbox.
 
Par contre la même solution ne fonctionne pas pour l'élément scale. En fait l'élément scale fournit de base un argument qui est ici la variable volume. Il s'agit de la valeur de l'élément scale. Par contre je ne sais pas comment faire pour faire passer en plus (ou à la place) l'argument number_of_track.
Or il faut que je sache à quelle piste l'élément scale en question correspond.  
 

Code :
  1. #Add gui element flicker + volume
  2. global volume_scale
  3. volume_scale[number_of_track] = Scale(app, variable = volume[number_of_track], from_ = 0.0, to = 1.0, command= lambda i=number_of_track: change_volume(i), resolution = 0.01, label = "Volume", orient = HORIZONTAL)
  4. volume_scale[number_of_track].grid(row = number_of_track - 1, column = 2)
  5. global check_button
  6. checkbutton[number_of_track] = Checkbutton(app, variable = flipper[number_of_track], command= lambda i=number_of_track: flip_it(i), text = "Play?" )
  7. checkbutton[number_of_track].grid(row = number_of_track - 1, column = 1)


 
 
Je peux mettre tout le code si ça peut aider ou si ça intéresse qqn...
 
Merci


Message édité par the marshall le 06-03-2010 à 17:13:58
Reply

Marsh Posté le 06-03-2010 à 17:12:35   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed