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 :

Association command boutton et fonction


Sujet :

Tkinter Python

  1. #1
    Candidat au Club
    Homme Profil pro
    caridina29@gmail.com
    Inscrit en
    Mars 2020
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : caridina29@gmail.com

    Informations forums :
    Inscription : Mars 2020
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Association command boutton et fonction
    Bonjour a tous,

    Je débute en programmation python. Mon petit objectif est de faire un jeu de Yams. Je bute depuis un moment sur l'association d'une seule fonction à plusieurs boutons. Dans l'exemple que je vous montre je crée 5 boutons. Je veux ensuite que le clic sur le bouton 1 change son texte en "YES1", le bouton 2 en "YES2", ect... Le but est pour moi de comprendre comment faire pour que la fonction sache quel bouton a été cliqué et modifie la bonne info. Merci d'avance.

    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
     
    #appel de tout tkinter (fenetre)
    from tkinter import *
     
    # créer une fenetre
    window = Tk()
    # paramètres d'affichage
    window.title("ma 1 ère apply")
    window.geometry("300x300")
    window.minsize(200, 200)
    window.config(background='blue')
    Liste_Boutons = []
     
     
    def Une_Fonction_Bouton():
        Liste_Boutons[i].config(text="YES" + str(i))
     
    for i in range(0, 5):
        # ajoute un bouton
        Liste_Boutons.append(Button(text="Bouton " + str(i)))
        # associe une fonction
        Liste_Boutons[i] = Button(text=i, font=("arial",20), bg='white', fg='black', command=Une_Fonction_Bouton)
        Liste_Boutons[i].pack(pady=3, fill=X)
     
     
    #affiche la fenetre
    window.mainloop()

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

    Citation Envoyé par ArnaudXY Voir le message
    Le but est pour moi de comprendre comment faire pour que la fonction sache quel bouton a été cliqué et modifie la bonne info.
    La méthode "simple" est de créer une fermeture/closure ou d'utiliser lambda.
    Pour apprendre à faire çà, je vous renvoie à la lecture d'un tuto.

    - W

  3. #3
    Candidat au Club
    Homme Profil pro
    caridina29@gmail.com
    Inscrit en
    Mars 2020
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : caridina29@gmail.com

    Informations forums :
    Inscription : Mars 2020
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    En m'inspirant du programme calculatrice que tu m'as proposé de regarder j'ai modifié mon programme et ça marche. J'avoue ne pas trop comprendre encore pourquoi. Mais je vais creuser un peu plus cette histoire de "return".
    Merci beaucoup, je suis enfin débloqué.

    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
     
    #appel de tout tkinter (fenetre)
    from tkinter import *
     
    # créer une fenetre
    window = Tk()
    # paramètres d'affichage
    window.title("ma 1 ère apply")
    window.geometry("300x300")
    window.minsize(200, 200)
    window.config(background='blue')
    Liste_Boutons = []
    iteration = []
     
    def Une_Fonction_Bouton(i):
     
        def traitement():
            Liste_Boutons[i].config(text="YES" + str(i))
        return traitement
     
    #end fonc bouton
     
     
    for i in range(0, 5):
        # ajoute un bouton
        Liste_Boutons.append(Button(text="Bouton " + str(i)))
     
        # associe une fonction
        Liste_Boutons[i] = Button(text=i, font=("arial",20), bg='white', fg='black', command=Une_Fonction_Bouton(i))
        Liste_Boutons[i].pack(pady=3, fill=X)
     
     
    #affiche la fenetre
    window.mainloop()

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

    Citation Envoyé par ArnaudXY Voir le message
    J'avoue ne pas trop comprendre encore pourquoi. Mais je vais creuser un peu plus cette histoire de "return".
    Plutôt que de vous contenter de recopier la solution, prenez le temps de comprendre les explications qui vont avec... Ce qui ne va pas sans écrire de petits exemples/tests pour voir si on a compris.

    - W

  5. #5
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 886
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 886
    Points : 3 725
    Points
    3 725
    Par défaut
    Salut,

    C'est vrai que c'est assez spécial les "fermetures", pas forcément évident à comprendre...

    Perso je pense que cela m'aurait intrigué/perturbé si je n'avais pas vu cela auparavant en JavaScript*(langage dans lequel les "fermetures" sont très largement étudiés et utilisés, c'est une notion importante)...

    Par contre je me demande laquelle des solutions (fermeture, fonction anonyme avec lambda...) est la moins gourmande en ressources (notamment mémoire)...





    * En JS on peut faire plus que retourner une fonction...

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

Discussions similaires

  1. Un boutton "command boutton control"
    Par alen dans le forum MFC
    Réponses: 0
    Dernier message: 25/11/2009, 00h00
  2. Créer commande SAS en fonction de la date
    Par ash_rmy dans le forum Macro
    Réponses: 7
    Dernier message: 18/12/2007, 11h17
  3. Réponses: 1
    Dernier message: 07/11/2007, 10h06
  4. Associer un thread à une fonction
    Par cris73 dans le forum Prolog
    Réponses: 1
    Dernier message: 10/03/2007, 10h17
  5. Commande d'une fonction exterieur
    Par 6su7 dans le forum C++
    Réponses: 16
    Dernier message: 13/02/2006, 14h53

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