appel de fonction par bouton

appel de fonction par bouton - Python - Programmation

Marsh Posté le 19-02-2019 à 18:28:04    

Bonjour.
 
Je dois me mettre à la programmation en Python (3 semaines seulement) pour raison professionnelle et aussi pour moi-même.
Je rencontre un problème. Je cherche depuis plusieurs jours et je galère.
 
J'ai créé un tableau avec différents boutons.
Je souhaiterais que chaque bouton appelle une fonction différente.
Mais comme chaque bouton est créé dans la même ligne, je ne sais pas comment appeler ces différentes fonctions...
 
 
 

Code :
  1. from tkinter import *
  2. from Raies import *
  3. from Berylium3 import *
  4. from lithium3 import *
  5. ligne1 = ['H','He']
  6. ligne2 =['Li', 'Be','B','C','N','O','F','Ne']
  7. ligne3=['Na','Mg','Al','Si','P','S','Cl','Ar']
  8. def nom():
  9.     H(test)
  10. test = Tk()
  11. test.geometry('1000x800')
  12. canevas = Canvas(test, width =500, height =400, bg="#000000" )
  13. canevas.place(x = 300,y = 400)
  14. frame_elements =Frame(canevas)
  15. frame_elements.grid()
  16. for j in range(2): # j = colonne
  17.     E = Button(frame_elements, text=ligne1[j], width=2, command=nom)
  18.     E.grid(row=1, column=j)
  19. for j in range(8): # j = colonne
  20.     E = Button(frame_elements, text=ligne2[j], width=2, command=lambda e=ligne2[j]:print(e))
  21.     E.grid(row=2, column=j)
  22. for j in range(8): # j = colonne
  23.     E = Button(frame_elements, text=ligne3[j], width=2, command=lambda e=j:fonction(test,e))
  24.     E.grid(row=3, column=j)
  25. test.mainloop()


 
Pour la première ligne de boutons... vu qu'il y a deux boutons, je voudrais appeler deux fonctions différentes... mais vu qu'il n'y a qu'une ligne de programme pour ce bouton...
Pour la deuxième ligne de boutons, je lui demande de m'afficher le texte du bouton... ça marche (mais ce n'est pas ce que je souhaite faire).
Pour la troisième ligne de boutons, je me suis dit qu'en nommant ces fonctions selon le numéro de la colonne, ça fonctionnerait... mais non, la boucle de création des boutons étant finie, le "e" reste à la valeur finale et c'est la même fonction qui est appelée.
 
Plusieurs questions :
- pourquoi ce "e" qui en fait est le "j" varie-t-il alors que pas le "j" (la boucle est finie)?
- comment m'y prendre ?
 
Comme précisé au départ, je suis tout nouveau, merci par avance de vos futures orientations.

Reply

Marsh Posté le 19-02-2019 à 18:28:04   

Reply

Sujets relatifs:

Leave a Replay

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