Problème de variable qui ne se met pas à jour
Résolu/Fermé
Ketool
-
8 mars 2016 à 01:33
Ketool Messages postés 10 Date d'inscription mardi 8 mars 2016 Statut Membre Dernière intervention 11 mars 2016 - 8 mars 2016 à 18:40
Ketool Messages postés 10 Date d'inscription mardi 8 mars 2016 Statut Membre Dernière intervention 11 mars 2016 - 8 mars 2016 à 18:40
A voir également:
- Problème de variable qui ne se met pas à jour
- Mettre à jour ses pilotes - Guide
- Mise a jour airpods - Guide
- Mise a jour windows 10 - Guide
- Vba range avec variable ✓ - Forum VB / VBA
- Mise a jour xiaomi - Guide
1 réponse
jisisv
Messages postés
3645
Date d'inscription
dimanche 18 mars 2001
Statut
Modérateur
Dernière intervention
15 janvier 2017
934
Modifié par jisisv le 8/03/2016 à 06:10
Modifié par jisisv le 8/03/2016 à 06:10
C'est normal, tu ne mets pas le label à jour. Une possibilité:
Lors des déplacements, on appelle la fonction update_distance qui modifie le membre text de infoLabel.
Il y aurait pas mal de choses à améliorer mais comme tu débutes
Gates gave ^W sold you the windows.
GNU gave us the whole house.(Alexandrin)
# Python 3.5.1 # Writed by Ketool from tkinter import * from math import sqrt def update_distance(x1, y1, x2, y2): global infoLabel dist = round(sqrt((x2-x1)**2+(y2-y1)**2), 2) infoLabel['text'] = 'La distance entre les deux objets est de : %f pixels' % (dist) def avance(hor, ver): global x1, y1, x2, y2 if var1.get() and var2.get(): x1, y1, x2, y2 = x1+hor, y1+ver, x2+hor, y2+ver can1.coords(obj1, x1, y1, x1+20, y1+20) can1.coords(obj2, x2, y2, x2+50, y2+50) elif var1.get(): x1, y1 = x1+hor, y1+ver can1.coords(obj1, x1, y1, x1+20, y1+20) elif var2.get(): x2, y2 = x2+hor, y2+ver can1.coords(obj2, x2, y2, x2+50, y2+50) update_distance(x1, y1, x2, y2) def haut(): avance(0, -10) def bas(): avance(0, +10) def gauche(): avance(-10, 0) def droite(): avance(+10, 0) # --------------- Programme principal --------------- # variable utilisées de manière globale x1, y1, x2, y2 = 30, 30, 540, 540 # Création du widget principal fen = Tk() fen.title("Déplacements multiples selon choix utilisateur et calcul de la distance") # Création des widgets esclaves can1 = Canvas(fen, width=600, height=600, bg='ivory') can1.grid(row=1, column=1, rowspan=7) obj1 = can1.create_oval(x1, y1, x1+20, y1+20, fill='red') obj2 = can1.create_oval(x2, y2, x2+50, y2+50, fill='yellow') var1 = IntVar() coche1 = Checkbutton(text="Rond rouge", variable=var1) coche1.grid(row=1, column=2) var2 = IntVar() coche2 = Checkbutton(text="Rond jaune", variable=var2) coche2.grid(row=2, column=2) Button(fen, text='Haut', command=haut).grid(row=3, column=2) Button(fen, text='Bas', command=bas).grid(row=4, column=2) Button(fen, text='Gauche', command=gauche).grid(row=5, column=2) Button(fen, text='droite', command=droite).grid(row=6, column=2) Button(fen, text='Quitter', command=fen.destroy).grid(row=7, column=2) dist = round(sqrt((x2-x1)**2+(y2-y1)**2), 2) infoLabel = Label(fen, text='La distance entre les deux objets est de : ' + str(dist) + ' pixels') infoLabel.grid(row=8, column=1, columnspan=2 ) # Démarrage du gestionnaire d'évenements fen.mainloop()
Lors des déplacements, on appelle la fonction update_distance qui modifie le membre text de infoLabel.
Il y aurait pas mal de choses à améliorer mais comme tu débutes
Gates gave ^W sold you the windows.
GNU gave us the whole house.(Alexandrin)
8 mars 2016 à 14:27
Question de bien comprendre, puis-je encore vous demander comment fonctionne le %f dans la ligne ci-dessous ?
Si j'ai bien compris, ça reprend la variable (dist) indiquée en fin de ligne mais c'est surtout l'utilisation du "f" qui m'intrigue ;-)
Par ailleurs, je constate que la distance est bien arrondie à 2 chiffres après la virgule mais 6 chiffres restent afficher. 652.459278 devient 652.460000. De quoi cela vient-il ?
8 mars 2016 à 17:49
Ici 3 et 8 donne la largeur minimale pour l'affichage. 2 est la longueur de la partie décimale
Autre exemple:
Les détails se trouvent sur String Formatting Operations
8 mars 2016 à 18:40