IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Tkinter Python Discussion :

Appliquer des fonctions à un tableau d'Entry


Sujet :

Tkinter Python

  1. #1
    Candidat au Club
    Femme Profil pro
    Gustave Eiffel BTS SIO
    Inscrit en
    Juin 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 28
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Gustave Eiffel BTS SIO

    Informations forums :
    Inscription : Juin 2015
    Messages : 3
    Points : 4
    Points
    4
    Par défaut Appliquer des fonctions à un tableau d'Entry
    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

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 302
    Points : 6 782
    Points
    6 782
    Par défaut
    Re,

    Je ne comprend pas ta question. D'autres peut-être.

    Que veux-tu dire par "lors de l’exécution il n'agissent que sur le dernier entry" ?

    Ton code n'est pas très lisible mais je vois ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    		self.btn_Erase_All = Button(self, text= "Effacer tout", command=self.delete_all_entries(liste_entry))
    Lorsque tu fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    command=self.delete_all_entrie
    la commande sera un appel de cette fonction (méthode),
    mais, lorsque tu fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    command=self.delete_all_entrie(liste_entry)
    La commande sera le retour de cette fonction (méthode) c'est-à-dire None

    S'il te plais, prend le temp de lire la PEP 8 afin d'éviter que ton code ne fasse fuir le lecteur.
    Je parle de l'usage irrationnel des underscores, et majuscules et des commentaires en fin de lignes.

    Regarde ici, l'officiel et une traduction
    https://www.python.org/dev/peps/pep-0008/
    http://sametmax.com/le-pep8-en-resume/

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 329
    Points : 36 848
    Points
    36 848
    Par défaut
    Lorsque vous écrivez:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    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]))
    La valeur récupérée dans "entry_Matrice" devrait aussi être fonction de (i, j).
    Mais, cette chose a été construite via:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
          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)
    Visiblement çà ne ressemble pas à un tableau et çà ne pourra être associé qu'à la dernière Entry créée.
    Pour le reste, c'est vrai que le code est tellement mal foutu que çà ne donne pas envie d'y mettre les doigts pour corriger.
    Désolé.

    - W

Discussions similaires

  1. comment appliquer un calcul en fonction du tableau ?
    Par toshiro92 dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 15/11/2007, 18h10
  2. fonction to_char appliquée à des dates
    Par new_wave dans le forum SQL
    Réponses: 16
    Dernier message: 13/11/2007, 15h19
  3. appliquer des effets à un tableau
    Par Esil2008 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 13/09/2007, 13h07
  4. Réponses: 10
    Dernier message: 18/05/2006, 16h18
  5. Tableau d'équivalence des fonctions ?
    Par jennings dans le forum WinDev
    Réponses: 3
    Dernier message: 12/07/2005, 16h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo