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 :

Modifier la couleur/texte d'un bouton/label externes à la fonction en cours.


Sujet :

Tkinter Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    Architecte réseau
    Inscrit en
    Janvier 2016
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Architecte réseau

    Informations forums :
    Inscription : Janvier 2016
    Messages : 36
    Points : 19
    Points
    19
    Par défaut Modifier la couleur/texte d'un bouton/label externes à la fonction en cours.
    Bonjour,
    je cherche depuis un petit moment comment modifier les propriétés d'objets qui ont été créés en dehors de la fonction en cours.

    Dans l'exemple suivant suivant (tiré de "Penser en Tkinter"), tout se déroule au niveau de la class MyApp et la "fonction locale" button1Click peut sans problème faire référence à self.button1 pour en changer les propriétés.
    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
    from Tkinter import *
     
    class MyApp:
    	def __init__(self, parent):
    		self.myParent = parent   
    		self.myContainer1 = Frame(parent)
    		self.myContainer1.pack()
     
    		self.button1 = Button(self.myContainer1, command=self.button1Click) ### (1)
    		self.button1.configure(text="OK", background= "green")
    		self.button1.pack(side=LEFT)
    		self.button1.focus_force()         
     
     
    		self.button2 = Button(self.myContainer1, command=self.button2Click)  ### (2)
    		self.button2.configure(text="Cancel", background="red")   	
    		self.button2.pack(side=RIGHT)
     
     
    	def button1Click(self):  ### (3)
    		print "button1Click event handler" 
    		if self.button1["background"] == "green":  
    			self.button1["background"] = "yellow"
    		else:
    			self.button1["background"] = "green"
     
    	def button2Click(self): ### (4)
    		print "button2Click event handler" 
    		self.myParent.destroy()      
     
     
     
    root = Tk()
    myapp = MyApp(root)
    root.mainloop()
    Mais comment modifier les propriétés d'un widget à partir d'une fonction qui n'est pas définie au même niveau (fonction externe à MyApp) ?
    en d'autres termes, est-ce qu'il est possible de mettre l'équivalent de la fonction interne button1Click à l'extérieur de la class MyApp ?

  2. #2
    Membre à l'essai
    Homme Profil pro
    Architecte réseau
    Inscrit en
    Janvier 2016
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Architecte réseau

    Informations forums :
    Inscription : Janvier 2016
    Messages : 36
    Points : 19
    Points
    19
    Par défaut
    Est-ce que je dois modifier la structure de mon code pour que tout ce qui a trait à l'aspect du bouton test au même niveau, quitte à créer une fonction interne qui prendra en charge la modification de l'aspect et prendra en charge le déclenchement de la fonction externe initialement associée au bouton ?

  3. #3
    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 776
    Points
    36 776
    Par défaut
    Citation Envoyé par scarou Voir le message
    Mais comment modifier les propriétés d'un widget à partir d'une fonction qui n'est pas définie au même niveau (fonction externe à MyApp) ?
    en d'autres termes, est-ce qu'il est possible de mettre l'équivalent de la fonction interne button1Click à l'extérieur de la class MyApp ?
    Depuis l'instance de myapp, la méthode récupère le Button à modifier via l'espace de nom "self". Si c'est une fonction externe, elle ne saura pas récupérer le Button sauf s'il est passé en paramètre (ou en utilisant .bind)?
    Le truc s'appelle "closure":

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    def b1click(btn):
            print "button1Click event handler" 
            if btn["background"] == "green":  
                    btn["background"] = "yellow"
            else:
                    btn["background"] = "green"
     
    class MyApp:
    	def __init__(self, parent):
                    ....    
    		self.button1.configure(text="OK", background= "green",
                               command=lambda btn=self.button1: b1click(btn))
    ...
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  4. #4
    Membre à l'essai
    Homme Profil pro
    Architecte réseau
    Inscrit en
    Janvier 2016
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Architecte réseau

    Informations forums :
    Inscription : Janvier 2016
    Messages : 36
    Points : 19
    Points
    19
    Par défaut
    Donc si je comprend bien, il y a toujours "un lien" (passage d'argument) entre les 2. Il n'est pas possible de désigner directement le bouton N et la page X à partir d'une procédure externe ?

    ça me semble bien compliqué mon affaire pour juste colorier des boutons à la manière de voyants...

    Peut-être que je pose mal mon problème, il y a peut-être des pratiques courantes pour réaliser ce genre de voyants ?

  5. #5
    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 776
    Points
    36 776
    Par défaut
    Citation Envoyé par scarou Voir le message
    Donc si je comprend bien, il y a toujours "un lien" (passage d'argument) entre les 2. Il n'est pas possible de désigner directement le bouton N et la page X à partir d'une procédure externe ?
    Vous pouvez toujours y accéder via "myapp" puisque vous avez stocké l'instance dans cette variable globale là. Mais si on a inventé les "class", c'est bien un peu pour éviter çà, non?

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

  6. #6
    Membre à l'essai
    Homme Profil pro
    Architecte réseau
    Inscrit en
    Janvier 2016
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Architecte réseau

    Informations forums :
    Inscription : Janvier 2016
    Messages : 36
    Points : 19
    Points
    19
    Par défaut
    En effet, je pense que je pose mal mon problème pour ces indicateurs...

  7. #7
    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 776
    Points
    36 776
    Par défaut
    Citation Envoyé par scarou Voir le message
    Donc si je comprend bien, il y a toujours "un lien" (passage d'argument) entre les 2. Il n'est pas possible de désigner directement le bouton N et la page X à partir d'une procédure externe ?
    Il faut quand même une relation qui permette de récupérer l'objet Button à modifier à partir de (X, N).... et le code qui réalise cette relation là d'une façon ou d'une autre. Donc ce n'est pas "direct".

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

  8. #8
    Membre à l'essai
    Homme Profil pro
    Architecte réseau
    Inscrit en
    Janvier 2016
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Architecte réseau

    Informations forums :
    Inscription : Janvier 2016
    Messages : 36
    Points : 19
    Points
    19
    Par défaut
    Je penses qu'il faut que j'aille plus loin dans l'apprentissage de la POO avant de vouloir effectuer ce genre de tâche. Ça va demander un peu plus de temps...

Discussions similaires

  1. [XL-2013] Modifier la couleur du texte d'un bouton activeX
    Par hanophil dans le forum Excel
    Réponses: 1
    Dernier message: 12/05/2017, 16h06
  2. Modifier valeur du texte des options d'un select en fonction de la value
    Par tom1970 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 14/12/2014, 12h31
  3. Comment modifier la couleur de focus de bouton
    Par Chacha35 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 08/10/2009, 15h55
  4. Réponses: 2
    Dernier message: 15/08/2006, 13h51
  5. modifier la couleur d'un texte dans un input text
    Par mic79 dans le forum Mise en page CSS
    Réponses: 8
    Dernier message: 05/01/2005, 16h45

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