Bonjour,
Voilà comme beaucoup je débute dans Python et Tkinter, après avoir suivi plusieurs tutos et m’aidant de plusieurs sites web plutôt bien foutu, j’ai pu mener à bien mon petit programme. Hors pour qu’il soit plus «*souple*» je galère depuis quelques jours sur la problématique suivante:
Pour faire simple l'idée de ce programme est le suivant*:
→ je fais remplir à l'utilisateur une case indiquant le nombre de transports quil a effectué, puis il fait apparaître en appuyant sur un bouton un tableau à remplir dont le nombre de ligne dépend du nombre de transports entré préalablement*;
→ il remplit le tableau, puis lance le bouton calcul qui affiche la durée de son trajet.
Rien de très compliqué.
Voici le programme (qui chez moi fonctionne).
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 #!/usr/bin/env python # -*- coding: utf-8 -*- from Tkinter import * fenetre = Tk() """DEBUT fonction affichage du tableau pour y entrer les vitesses et distances en fonction du nombre de transport""" def affichage(): """DEBUT Fonction calculer calcul et affichage du temps de trajet""" def Calculer(): k=0 som=0 while k<a: v=float(value_vitesse[k].get()) d=float(value_distance[k].get()) som=d/v+som k=k+1 label_nbtrans = Label(fenetre, text="La durée du trajet est de :"+str(som)+" h") label_nbtrans.grid(row=a+5, column=1) """FIN fonction calculer""" k=0 a = int(value_nbtrans.get()) value_distance=[0]*a value_vitesse=[0]*a while k<a: value_distance[k] = StringVar() value_distance[k].set("1") entree_distance = Entry(fenetre, textvariable=value_distance[k], width=30) entree_distance.grid(row=3+k, column=1) value_vitesse[k] = StringVar() value_vitesse[k].set("1") entree_vitesse = Entry(fenetre, textvariable=value_vitesse[k], width=30) entree_vitesse.grid(row=3+k, column=2) k=k+1 b2 = Button(text='Calculer', command=Calculer) b2.grid(row=a+4, column=1) """FIN fonction affichage""" #nombre_de_transports label_nbtrans = Label(fenetre, text="Nombre de transports utilisés") label_nbtrans.grid(row=1, column=1) value_nbtrans = StringVar() entree_nbvoies = Entry(fenetre, textvariable=value_nbtrans, width=30) entree_nbvoies.grid(row=1, column=2) b1 = Button(text='Afficher le tableau', command=affichage) b1.grid(row=1, column=3) #nom_des_colones label_distance = Label(fenetre, text="Distance km") label_distance.grid(row=2, column=1) label_vitesse = Label(fenetre, text="Vitesse km/h") label_vitesse.grid(row=2, column=2) fenetre.mainloop()
Le programme fonctionne mais ma problématique est la suivante*:
- j'entre une donnée pour le nombre de transports puis je la modifie, ça se cumule visuellement et c'est pas beau....
Donc lorsque je relance l’affichage du tableau je veux RAZ ce qu’il y avait avant.
Hors avec ma méthode je ne vois pas comment faire, en effet si j’utilise la fonction destroy qui semble parfaitement indiqué (à mon avis du moins) sur des éléments comme entree_distance ou entree_vitesse ça n’efface que la dernière ligne (à la vue du programme c’est assez logique comme comportement, puisque lors de l'itération toutes les lignes se sont appelées tour à tour par ces noms).
En plus des solutions que vous allez m'apporter (en tout cas je l’espères), pouvez vous me dire si ce qui suit est réalisable*:
1/est il possible d’avoir un élément variable dans la définition d’un Entry comme j’ai pu faire pour les value, imaginons entree_vitesse[k] (qui j'ai essayé ne semble pas fonctionné),
2/ est il possible au lieu d'entrer un élément comme entree_vitesse ou entree_distance comme cible de destroy d'y entrer les coordonnées de case du tableau "grid"?
En espérant avoir été clair et en étant très impatient de vous lire et d'en apprendre plus*!! Merci par avance.
Partager