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 :

Time.sleep(t) dans une boucle ? [Python 3.X]


Sujet :

Tkinter Python

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Janvier 2017
    Messages : 6
    Points : 9
    Points
    9
    Par défaut Time.sleep(t) dans une boucle ?
    Bonsoir à tous, j'ai actuellement un petit souci avec l'utilisation de la fonction time.sleep()
    Je programme un jeu de billard (ce n'est pas mon programme complet, juste un extrait modifié pour mettre en évidence mon probleme) et ce programme "devrait" faire bouger la boule sur le Canvas. Le seul souci se situe dans la boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    def tirer():
        p = 10
        a = 45
        for i in range(0,p):
            global blanche,x0,y0
            canevas.delete(blanche)
            time.sleep(0.1)
            x0 = x0 + 20
            y0 = y0 + 20
            blanche = canevas.create_oval(x0-12,y0-12,x0+12,y0+12, fill='white')
    En effet Python semble attendre avant et non à chaque incrémentation dans la boucle, alors que j'ai placé cette fonction time.sleep() pour que la trajectoire de la balle soit visible, et non qu'elle se "téléporte"
    Le plus simple est de copier-coller le code ci-dessous si vous ne comprenez pas ce que je veux dire
    Merci d'avance pour toute réponse concernant la fonction time.sleep() ou pour une alternative

    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
    from tkinter import *
    import time
     
     
    fen = Tk()
    fen.geometry("%dx%d%+d%+d" % (1260,940,1,1))
    fen['bg']="#92afac"
    fen.title("Jeu du Billard")
     
    canevas = Canvas(fen, width =990, height =522, bg ='#92afac', borderwidth=0)
    canevas.grid(row=2, column=0, columnspan=4, pady=90, padx=130, sticky='sw')
     
    x0=12
    y0=12
    blanche = canevas.create_oval(x0-12,y0-12,x0+12,y0+12, fill='white')
     
     
    def tirer():
        p = 10
        a = 45
        for i in range(0,p):
            global blanche,x0,y0
            canevas.delete(blanche)
            time.sleep(0.1)
            x0 = x0 + 20
            y0 = y0 + 20
            blanche = canevas.create_oval(x0-12,y0-12,x0+12,y0+12, fill='white')
     
     
     
    faire_tir = Button(fen, text=" Tirer la blanche ! ", command=tirer)
    faire_tir.grid()
     
    fen.mainloop()

  2. #2
    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 778
    Points
    36 778
    Par défaut
    Salut,

    Citation Envoyé par nonotiptop Voir le message
    En effet Python semble attendre avant et non à chaque incrémentation dans la boucle, alors que j'ai placé cette fonction time.sleep() pour que la trajectoire de la balle soit visible, et non qu'elle se "téléporte"
    C'est pas Python qui attend mais tkinter qui ne peut faire de mise à jour avant que votre boucle ne se termine. Il y a des solutions pour faire fonctionner ce genre de code, mais il faut maîtriser ce qu'est un engin comme tkinter pour ne pas faire n'importe quoi.
    Le plus simple est de lire ce chapitre de notre tuto préféré.
    Les animations sont abordées à la fin du chapitre (et aussi dans le chapitre 20).
    Lire aussi les cours et tutoriels pour apprendre Python.

    - 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.

Discussions similaires

  1. Thread sleep dans une boucle
    Par Sharcoux dans le forum Général Java
    Réponses: 7
    Dernier message: 17/03/2013, 19h29
  2. Méthode Wait,Sleep dans une boucle
    Par kilian68 dans le forum Interfaces Graphiques en Java
    Réponses: 2
    Dernier message: 17/12/2009, 11h50
  3. sleep dans une boucle de daemon
    Par TheDrev dans le forum Linux
    Réponses: 6
    Dernier message: 05/08/2009, 16h33
  4. Comment faire un Sleep dans une boucle PL/SQL
    Par foster06 dans le forum PL/SQL
    Réponses: 3
    Dernier message: 01/02/2008, 18h59
  5. Pause dans une boucle
    Par HT dans le forum Langage
    Réponses: 4
    Dernier message: 03/06/2003, 08h52

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