Bonjour,
voilà je suis débutante en python et surtout en Tkinter que j'utilise pour la 1ere fois depuis moins d'une semaine pour faire un petit programme de calculs matriciels,

donc j'ai un tableau d'Entry qui sert à saisir les valeurs d'une matrice, et 2 boutons btn_Erase_All qui dans l'idée sert à effacer d'un coup toutes les valeurs des entry et un autre : btn_Val_Mat qui sert à valider la saisie de la matrice, ces boutons sont reliés à 2 fonctions différentes mais lors de l’exécution il n'agissent que sur le dernier entry. Ça doit être bête mais je ne trouve pas pourquoi, si qqulqu'un peut m'aider ça serait gentil .

Voici la partie du code concernée le programme complet est dans l'archive jointe exempleTkInterEtu.rar :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#Cette classe hérite de tkinter.Frame (objet graphique)
class ctrlEditMatrice(Frame):
	"Controleur graphique pour l'édition d'une matrice" # pour la documentation
	def __init__(self, parent,matr):
		Frame.__init__(self,parent) #appel du constructeur de la classe parente
		self.parent = parent # on conserve en attribut la fenêtre parente qui contient le controleur
		self.matr = matr # on met en attribut la matrice à éditer
		self._initialize() # on appelle la méthode d'initialisation du widget
 
	def _initialize(self):
		"méthode privée appelée par le constructeur pour charger et remplir les éléments graphiques" # commentaire de documentation
 
		#crée et positionne les widget de la colonne 0 qui servent au choix du nombre de lignes/colonnes
		self.var_Nbr_Lignes = IntVar()
		self.var_Nbr_Lignes.set(self.matr.lignes)
		self.label_NbreLignes = Label(self, text="Nombre de lignes:")
		self.label_NbreLignes.grid(column=0, row=0, sticky='NSEW')
		self.entry_NbreLignes = Entry(self, textvariable="3")
		self.entry_NbreLignes.grid(column=0, row=1, sticky='NSEW') # positionne le champ dans la grille
 
 
		self.var_Nbr_Colonnes = IntVar()
		self.var_Nbr_Colonnes.set(self.matr.colonnes)
		self.label_NbreColonnes = Label(self, text="Nombre de colonnes:")
		self.label_NbreColonnes.grid(column=0, row=2, sticky='NSEW') 
		self.entry_NbreColonnes = Entry(self, textvariable="4")
		self.entry_NbreColonnes.grid(column=0, row=3, sticky='NSEW') # positionne le champ dans la grille
		self.btn_Val_L_C = Button(self, text= "Valider", command= self._update_Matr_LC)
		self.btn_Val_L_C.grid(column=0,row=6, sticky='NSEW')
 
 
		#affiche le nom des lignes/colonnes de la matrice
		for i in range (self.var_Nbr_Lignes.get()):
			self.btn_S_M = Button(self, text=("S"+str(i+1)))
			self.btn_S_M.grid(column=2, row=(i+1), sticky='NSEW')
 
		for i in range (self.var_Nbr_Colonnes.get()):
			self.btn_R_M = Button(self, text=("R"+str(i+1)))
			self.btn_R_M.grid(column=(i+4), row=0, sticky='NSEW')
 
		#Creation des entre de saisie de values de la matrice
		liste_entry = []
		rows = []
		for i in range(self.var_Nbr_Lignes.get()):
			cols = []
			for j in range(self.var_Nbr_Colonnes.get()):
				self.var_Value_Matrice = IntVar()
				self.var_Value_Matrice.set(self.matr.tableau[i][j])
				self.entry_Matrice = Entry(self, justify='center', cursor='pencil')
				self.entry_Matrice.insert(END, '(%d , %d)' % ((i), (j)))
				liste_entry.append(self.entry_Matrice)
				cols.append(self.entry_Matrice)
				self.entry_Matrice.grid(column=(j+4), row=(i+1), sticky='NSEW')
			rows.append(cols)
 
		self.btn_Val_Mat = Button(self, text= "Valider tout", command= self._updateMatrModelAll)
		self.btn_Val_Mat.grid(column=((self.var_Nbr_Colonnes.get())+3), row=6, sticky='NSEW')
#crée et positionne le bouton qui efface toutes les values des entry de la matrice
		self.btn_Erase_All = Button(self, text= "Effacer tout", command=self.delete_all_entries(liste_entry))
		self.btn_Erase_All.grid(column=2,row=0, sticky='NSEW')
 
 
 
			#self.pack()
	"""# methode de mise à jour du nom dans le modèle après modif sur l'interface
        def _updateMatrModelLC(self):
                self.matr.lignes= int_nb_l
                self.matr.colonnes= int_nb_c"""
# methode de mise à jour des valeurs de la matrice après modif sur l'interface
	def _updateMatrModelAll(self):
		self.matr.lignes= int(self.var_Nbr_Lignes.get())
		self.matr.colonnes= int(self.var_Nbr_Colonnes.get())
		for i in range (self.matr.lignes):
			for j in range (self.matr.colonnes):
				self.matr.tableau[i][j] = int(self.entry_Matrice.get())
				print("Entrée "+str(i)+" , "+str(j)+" Sauvegardée, valeur: " + str(self.matr.tableau[i][j]))
 
	def _update_Matr_LC(self):
		self.matr.lignes = int(self.var_Nbr_Lignes.get())
		self.matr.colonnes = int(self.var_Nbr_Colonnes.get())
		print ("Entrée Sauvegardée lignes: "+str(self.matr.lignes)+" colonnes: "+ str(self.matr.colonnes))
 
	def delete_all_entries(self, lst):
		for entry in enumerate(lst):
			self.entry_Matrice.delete(0, END) # clear