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 :

Créer et modifier oval


Sujet :

Tkinter Python

  1. #21
    Nouveau membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Janvier 2017
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Janvier 2017
    Messages : 99
    Points : 26
    Points
    26
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,
    Essayez de vous passer de global (vous utilisez des class donc vous n'en avez pas besoin), évitez exec et time.sleep... (les utiliser traduisent des problèmes de compréhension ou de conception).
    - W
    Merci.
    oui ne pas utiliser "exec" est justement mon 1er but et j'y travaille déjà

  2. #22
    Nouveau membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Janvier 2017
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Janvier 2017
    Messages : 99
    Points : 26
    Points
    26
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,
    Essayez de vous passer de global (vous utilisez des class donc vous n'en avez pas besoin), évitez exec et time.sleep... (les utiliser traduisent des problèmes de compréhension ou de conception).
    - W
    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()

  3. #23
    Nouveau membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Janvier 2017
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Janvier 2017
    Messages : 99
    Points : 26
    Points
    26
    Par défaut
    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()

  4. #24
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 781
    Points
    36 781
    Par défaut
    Salut,

    Citation Envoyé par tm68780 Voir le message
    J'ai malgré tout amélioré mon code, oui je sais...
    Maintenant il n'y a plus de d' "Update" dans le code
    On y trouve:

    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())
    Et je vous ai expliqué dans une autre discussion que .after(..., f()) où f retourne None équivaut à appeler f() suivi d'un time.sleep.

    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
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Créer ou modifier un shell avec interface python et le lancer
    Par jameson dans le forum Général Python
    Réponses: 11
    Dernier message: 26/08/2008, 09h59
  2. Créer ou modifier un dossier en fonction d'une valeur dans une cellule
    Par Pierre.g dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 13/08/2008, 17h37
  3. Réponses: 2
    Dernier message: 14/05/2008, 11h17
  4. Réponses: 6
    Dernier message: 21/09/2006, 16h08
  5. [JAVA] Lien expliquant comment créer/ lire / modifier un XML
    Par The_revival dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 07/12/2005, 17h10

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