Plus de global, lus de "exec"
Pour l'attente "sleep" je devrais trouver un délai à configurer sur l'évènement "ampoule affichée"
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 from tkinter import * import time import gc class ampoules: def __init__(self, nom_can, pos_amp_x, pos_amp_y, taille): self.ampoule = nom_can.create_oval(pos_amp_x, pos_amp_y, pos_amp_x+taille, pos_amp_y+taille, width=4, fill='grey') def allume_lamp(self, nom_can): nom_can.itemconfigure(self.ampoule, fill='red') def etteind_lamp(self, nom_can): nom_can.itemconfigure(self.ampoule, fill='grey') class feux: def __init__(self, nom_can, pos_feux_x, pos_feux_y, taille, ecart, liste_feux): self.ampoule1 = ampoules(nom_can, pos_feux_x, pos_feux_y, taille) pos_feux_y = (pos_feux_y+taille+ecart) self.ampoule2 = ampoules(nom_can, pos_feux_x, pos_feux_y, taille) liste_feux.append(self) def allume_feux(self, nom_can): self.ampoule1.allume_lamp(can1) self.ampoule2.allume_lamp(can1) def etteind_feux(self, nom_can): self.ampoule1.etteind_lamp(can1) self.ampoule2.etteind_lamp(can1) class panneau_feux: def __init__(self, nom_can, pos_panneau_x, pos_panneau_y): self.liste_feux = [] liste_nom_feux = ["feux1","feux2","feux3","feux4","feux5"] self.taille = 60 self.ecart = 20 for le_nom in liste_nom_feux: le_nom=feux(nom_can, pos_panneau_x, pos_panneau_y, self.taille, self.ecart, self.liste_feux) pos_panneau_x = (pos_panneau_x + self.taille + self.ecart) def allume_panneau(self, nom_can): pass def etteind_panneau(self, nom_can): for le_feux in self.liste_feux: le_feux.etteind_feux(nom_can) def demarre_course(self, nom_can): time.sleep(3) for le_feux in self.liste_feux: le_feux.allume_feux(nom_can) nom_can.update() time.sleep(1) self.etteind_panneau(nom_can) nom_can.update() time.sleep(1) window = Tk() window.title("Feux de départ") window.geometry("480x360") window.config(background="#41B77F") can1 = Canvas(window, bg='dark grey', height=330, width=440) can1.pack(expand="YES") panneau1 = panneau_feux(can1, 30, 30) can1.update() panneau1.demarre_course(can1) window.mainloop()
Bonjour,
J'ai malgré tout amélioré mon code, oui je sais...
Maintenant il n'y a plus de d' "Update" dans le code et le bout de code qui me posait problème se trouve dans le constructeur de la classe.
J' aimerai tout de même vous donner mon point de vue sur la démarche du programmeur d'aujourd'hui, par rapport à vos dernières remarques;
mais dans cette discussion il n'a pas sa place. Peut-être y a t-il un autre moyen de vous l'exprimer par un autre moyen.
Merci encore
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 from tkinter import * import time import gc class ampoules: def __init__(self, nom_can, pos_amp_x, pos_amp_y, taille): self.ampoule = nom_can.create_oval(pos_amp_x, pos_amp_y, pos_amp_x+taille, pos_amp_y+taille, width=4, fill='grey') def allume_lamp(self, nom_can): nom_can.itemconfigure(self.ampoule, fill='red') def etteind_lamp(self, nom_can): nom_can.itemconfigure(self.ampoule, fill='grey') class feux: def __init__(self, nom_can, pos_feux_x, pos_feux_y, taille, ecart, liste_feux): self.ampoule1 = ampoules(nom_can, pos_feux_x, pos_feux_y, taille) pos_feux_y = (pos_feux_y+taille+ecart) self.ampoule2 = ampoules(nom_can, pos_feux_x, pos_feux_y, taille) liste_feux.append(self) def allume_feux(self, nom_can): self.ampoule1.allume_lamp(can1) self.ampoule2.allume_lamp(can1) def etteind_feux(self, nom_can): self.ampoule1.etteind_lamp(can1) self.ampoule2.etteind_lamp(can1) class panneau_feux: def __init__(self, nom_can, pos_panneau_x, pos_panneau_y): self.liste_feux = [] liste_nom_feux = ["feux1","feux2","feux3","feux4","feux5"] self.taille = 60 self.ecart = 20 # Création des panneaux de feux (5 feux) for le_nom in liste_nom_feux: le_nom=feux(nom_can, pos_panneau_x, pos_panneau_y, self.taille, self.ecart, self.liste_feux) pos_panneau_x = (pos_panneau_x + self.taille + self.ecart) # procédure de démarrage for le_feux in self.liste_feux: nom_can.after(1000, le_feux.allume_feux(nom_can)) nom_can.after(1000,nom_can.update()) nom_can.after(1000, self.etteind_panneau(nom_can)) def allume_panneau(self, nom_can): pass def etteind_panneau(self, nom_can): for le_feux in self.liste_feux: le_feux.etteind_feux(nom_can) window = Tk() window.title("Feux de départ") window.geometry("480x360") window.config(background="#41B77F") can1 = Canvas(window, bg='dark grey', height=330, width=440) can1.pack(expand="YES") panneau1 = panneau_feux(can1, 30, 30) window.mainloop()
Salut,
On y trouve:
Et je vous ai expliqué dans une autre discussion que .after(..., f()) où f retourne None équivaut à appeler f() suivi d'un time.sleep.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 # procédure de démarrage for le_feux in self.liste_feux: nom_can.after(1000, le_feux.allume_feux(nom_can)) nom_can.after(1000,nom_can.update())
Changez de perspective: créez un bouton qui à chaque pression allume successivement les "feux".
Pour faire çà, l'appui sur le Button doit appeler un callback.
Puis vous utilisez .after pour appeler ce callback toutes les secondes.
- W
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager