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 :

Faire prendre une couleur intermédiaire à un objet.


Sujet :

Tkinter Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    ???
    Inscrit en
    Avril 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : ???

    Informations forums :
    Inscription : Avril 2014
    Messages : 4
    Par défaut Faire prendre une couleur intermédiaire à un objet.
    Bonjour,

    Je débute avec Tkinter et je voudrais faire en sorte que mon objet rouge devienne bleu au moment où je clique sur le bouton puis qu'il devienne vert une fois que le bouton aura tout exécuté. Mais dans l'état actuel des choses mon objet passe directement de rouge à vert sans prendre de couleur intermédiaire et je ne sais pas comment corriger ça.

    Voici le code qui illustre mon problème :
    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
    import time
    from tkinter import *
     
    class Interface(Frame):
     
        def __init__(self, fenetre):
            Frame.__init__(self, fenetre, width=10, height=10)
            self.grid(padx=1, pady=1)
     
            self.cube1 = Label(fenetre, text="     ", bg="#ff0000") #Objet rouge
            self.cube1.grid(row=2,column=2)
     
            self.bouton_start = Button(fenetre, text="Start", fg='#ffff0f', bg='#05cf0f', command=self.changercouleur) #Bouton start qui déclenche le changement de couleur
            self.bouton_start.grid(row=1,column=1)
     
        def changercouleur(self):
            self.cube1.configure(bg="#0000ff") #Couleur intermédiaire bleue qui n'est pas prise en compte 
     
            time.sleep(3)
     
            self.cube1.configure(bg="#00ff00") #Couleur finale verte
     
     
    fenetre = Tk()
    interface = Interface(fenetre)
    interface.mainloop()
    Merci d'avance pour vos éventuelles solutions !

  2. #2
    Membre averti Avatar de NAIGRE1
    Homme Profil pro
    Collégien
    Inscrit en
    Juin 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 18
    Localisation : Caraïbes

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Juin 2018
    Messages : 12
    Par défaut
    Petit programme de forceur . Mais qui devrait aller :

    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
    import time
    from tkinter import *
     
    class Interface(Frame):
        def __init__(self, fenetre):
            Frame.__init__(self, fenetre, width=10, height=10)
            self.grid(padx=1, pady=1)
     
            self.color="#ff0000"
     
            self.cube1 = Label(fenetre, text="     ", bg=self.color) #Objet rouge
            self.cube1.grid(row=2,column=2)
     
            self.bouton_start = Button(fenetre, text="Start", fg='#ffff0f', bg='#05cf0f', command=self.changercouleur) #Bouton start qui déclenche le changement de couleur
            self.bouton_start.grid(row=1,column=1)
     
        def changercouleur(self):
            if self.color=="#ff0000":
                self.color="#0000ff"
                self.cube1.configure(bg="#0000ff") #Couleur intermédiaire bleue qui n'est pas prise en compte
     
                fenetre.after(1000, self.changercouleur)
            elif self.color=="#0000ff":
                self.color="#00ff00"
                self.cube1.configure(bg="#00ff00") #Couleur finale verte
     
     
    fenetre = Tk()
    interface = Interface(fenetre)
    interface.mainloop()

  3. #3
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 746
    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 746
    Par défaut
    Salut,

    changercouleur est ce qu'on appelle un "callback" parce que fonction appelée directement par tkinter lorsqu'on aura cliqué sur le Button.
    Tant que le callback s'exécute, tkinter ne peut pas faire de mise à jour: l'interface utilisateur sera gelée. Donc un callback doit durer un minimum de temps, ce qui fait qu'il n'est pas très futé d'y mettre des time.sleep. Et puisque les mises à jours ne sont effectuées qu'après, vous ne verrez jamais la première couleur en procédant ainsi.
    Il y a plein de solutions mais si vous ne connaissez pas ce type de programmation, il faut commencer par ouvrir un tuto. Le Swinnen raconte cela en plusieurs chapitres dont un parle des animations.
    Bon courage

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  4. #4
    Membre à l'essai
    Homme Profil pro
    ???
    Inscrit en
    Avril 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : ???

    Informations forums :
    Inscription : Avril 2014
    Messages : 4
    Par défaut
    Bonjour,

    Merci pour la réponse. Ca fonctionne très bien !
    Je vais quand même jeter un œil aux tutos proposées par wiztricks. Ca ne me fera pas de mal !

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

Discussions similaires

  1. Faire clignoter une couleur dans Tedit
    Par redoran dans le forum Composants VCL
    Réponses: 11
    Dernier message: 07/09/2010, 15h59
  2. faire varier une distance entre deux objets
    Par Neuropsy dans le forum VB.NET
    Réponses: 1
    Dernier message: 05/11/2009, 09h44
  3. [awt.Color] Faire clignoter une couleur
    Par merlieRa dans le forum AWT/Swing
    Réponses: 13
    Dernier message: 07/08/2008, 10h51
  4. Réponses: 8
    Dernier message: 17/08/2006, 16h16
  5. Réponses: 9
    Dernier message: 09/11/2004, 11h41

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