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 :

Couleur qui change automatiquement toutes les secondes [Python 3.X]


Sujet :

Tkinter Python

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2012
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2012
    Messages : 31
    Points : 31
    Points
    31
    Par défaut Couleur qui change automatiquement toutes les secondes
    Bonsoir à tous,

    Je fais mes premières armes avec Tkinter... Plus de bas que de haut pour le moment. Parmi les mini programmes que j'essaie de faire pour m'entraîner il y a celui-ci, très simple (sauf que je n'y arrive pas). Il s'agit d'afficher un cercle dont la couleur change d'elle-même, périodiquement, toutes les secondes par exemple, couleurs piochées dans une liste ou générées par un peu de code. Voici autour de quoi j'ai construit mes essais. Un seul cercle est tracé, à la fin des 3 boucles imbriquées. Ça me dépasse. Toute ma reconnaissance à celles ou ceux qui pourraient me dépanner.

    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
     
    from tkinter import *
    from time import *
     
    fen = Tk()
     
    canevas = Canvas(fen, width=400, height=400, bg = 'black')
    rond = canevas.create_oval(10, 10, 390, 390, fill='#111')
    canevas.pack()
     
    for i in 'ac':
        for j in '01':
            for k in 'f':            
                coul = i+j+k
                sleep(1)
                canevas.itemconfigure(rond, fill='#'+coul)
     
    fen.mainloop()

  2. #2
    Membre expérimenté
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 895
    Points : 1 572
    Points
    1 572
    Billets dans le blog
    5
    Par défaut
    Bonjour,
    Les boucles for/while bloquent le mainloop(). Avec tkinter on fait de la programmation évenentiel :la bonne pratique est d'utiliser la méthode after. Exemple :
    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
    from tkinter import *
    from time import *
    import itertools
     
    fen = Tk()
     
    canevas = Canvas(fen, width=400, height=400, bg = 'black')
    rond = canevas.create_oval(10, 10, 390, 390, fill='#111')
    canevas.pack()
    coul = [] 
    for i in 'ac':
        for j in '01':
            for k in 'f':            
                coul.append("#"+i+j+k)
    it = itertools.cycle(coul)
     
    def change_coul():
        couleur = next(it)
        canevas.itemconfigure(rond, fill=couleur)
        boucle = canevas.after(1000, change_coul) 
    change_coul()
     
     
    fen.mainloop()
    Sinon, tu peux aussi de te contenter de "raffraichir" ton canevas en utilisant la méthode update()
    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
    from tkinter import *
    from time import *
     
    fen = Tk()
     
    canevas = Canvas(fen, width=400, height=400, bg = 'black')
    rond = canevas.create_oval(10, 10, 390, 390, fill='#111')
    canevas.pack()
     
    for i in 'ac':
        for j in '01':
            for k in 'f':            
                coul = i+j+k
                sleep(1)
                canevas.itemconfigure(rond, fill='#'+coul)
                canevas.update()
    fen.mainloop()

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2012
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2012
    Messages : 31
    Points : 31
    Points
    31
    Par défaut
    Merci mille fois pour ta réponse, ultra rapide, concise, efficace. Elle m'aide beaucoup pour plein d'autres choses. Je vais pouvoir avancer.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 31
    Dernier message: 25/01/2018, 14h27
  2. definition d'une tache qui s'execute toutes les secondes
    Par Mokhtar BEN MESSAOUD dans le forum Administration système
    Réponses: 3
    Dernier message: 07/08/2007, 07h19
  3. Div qui se recharge toutes les x secondes
    Par Msieurduss dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 21/06/2006, 16h41
  4. envoyer un formulaire automatiquement toutes les 3 seconde
    Par rom62 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 15/05/2006, 15h08
  5. changer la couleur de mon Form1 toutes les secondes
    Par stacker_junior dans le forum C++Builder
    Réponses: 9
    Dernier message: 10/05/2006, 19h36

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