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 :

creation de commandes dynamiques pour des boutons [Python 3.X]


Sujet :

Tkinter Python

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Avril 2018
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2018
    Messages : 20
    Points : 9
    Points
    9
    Par défaut creation de commandes dynamiques pour des boutons
    Bonjour,
    J'ai développé une appli qui regroupe plusieurs applis à partir de pyhton et tkinter.
    Chaque appli à son propre bouton qui lance son propre code. Tout est actuellement géré en fixe concernant les boutons et commandes liées.
    Hors je suis en train de modifier la façon dont sont générés les boutons.
    Je veux créer les boutons à partir d'un fichier ini qui me donne la liste des applis à prendre en compte.(le nombre et leur nom)
    Jusque la j'arrive à faire tout ça, ce qui me bloque c'est que je n'arrive pas a générer la "command" des boutons en fonction de leur noms qui doit lancer le code qui porte leur nom également.
    voici un bout du code pour comprendre le fonctionnement :
    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    #1ER APPLI
    def WEBMATIQUE_72(event=None):
    .....
    #2EME APPLI
    def GK(event=None):
    .....
    #3
    ....
    
    #CREATION DES BOUTONS A PARTIR DE LA
        LISTE_COULEURS = [......]
        num_appli = 0
        num_couleur = 0
        
        parser = ConfigParser()
        parser.read('C:\APPLILOC\APPLI+\APPLI+_PARAM.ini')
        sec = parser.sections()[0]
        for name, value in parser.items(sec):
            if value=='OUI' or value=='oui':
                LISTE_BOUTONS.append(name)
    
        print(LISTE_BOUTONS)
    
        for i in LISTE_BOUTONS:
            if num_appli <= 15:
                NOM_APP = LISTE_BOUTONS[num_appli].upper()
                print(NOM_APP)
                bouton = Button(Frame_BOUTONS_1, text=(LISTE_BOUTONS[num_appli].upper()).replace("_", "\n"), background=LISTE_COULEURS[num_couleur],command=lambda temp_APP=NOM_APP: ???? , font=font.Font(size=8, weight="bold"), height=2)
                bouton.pack(side='left')
                ws.update_idletasks()
                if bouton.winfo_width()<50:
                    bouton.config(width=5)
            else:
                bouton = Button(Frame_BOUTONS_2, text=(LISTE_BOUTONS[num_appli].upper()).replace(" ", "\n"), background=LISTE_COULEURS[num_couleur], command="", font=font.Font(size=8, weight="bold"), height=2)
                bouton.pack(side='left')
                ws.update_idletasks()
                if bouton.winfo_width() < 50:
                    bouton.config(width=5)
            num_appli=num_appli+1
            if num_couleur == 27:
                num_couleur = 0
            else:
                num_couleur = num_couleur + 1
    j'ai rechercher sur le net et j'ai trouvé des utilisation de lambda qui semble convenir mais soit je n’exécute rien soit c'est toujours le même code qui ce lance peut importe le bouton.
    Merci d'avance pour votre aide.

  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 776
    Points
    36 776
    Par défaut
    Citation Envoyé par gazou20 Voir le message
    j'ai rechercher sur le net et j'ai trouvé des utilisation de lambda qui semble convenir mais soit je n’exécute rien soit c'est toujours le même code qui ce lance peut importe le bouton.
    L'important est de montrer ce que vous avez essayé, raconter pourquoi ça devrait fonctionner et le résultat obtenu...
    Là, on va pouvoir vous donner un autre exemple mais sans le contexte, il ne vous servira pas plus.

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

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Avril 2018
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2018
    Messages : 20
    Points : 9
    Points
    9
    Par défaut
    j'ai essayer comme ca:
    j'ai renommé le nom des commande de chaque applis en utilisant le même nom et de mettre le nom de l'appli en paramètre mais ca exécute la dernière a chaque fois.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    def ACTION(WEBMATIQUE_72):
    ...
    
    def ACTION(GK):
    ...
    
    
    bouton = Button(Frame_BOUTONS_1, text=(LISTE_BOUTONS[num_appli].upper()).replace("_", "\n"), background=LISTE_COULEURS[num_couleur],command=lambda temp_APP=NOM_APP: ACTION(temp_APP) , font=font.Font(size=8, weight="bold")
    cela exécute ACTION(GK) sur chaque boutons créés.

  4. #4
    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
    Salut,

    Ce que vous montrez, c'est plusieurs définitions de la fonction action où la dernière "écrase" les précédentes.
    Ce qui semble être cohérent avec ce que vous constatez... mais c'est comme çà que Python fonctionne et il faut apprendre à faire avec.

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

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Avril 2018
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2018
    Messages : 20
    Points : 9
    Points
    9
    Par défaut
    J'ai finalement réussi à faire ce que je voulais.
    voila comment j'ai contourné le problème:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    def CHOIX_APP(NOM_APP):
        if NOM_APP=="WEBMATIQUE_72":
            WEBMATIQUE_72()
        if NOM_APP=="GK":
            GK()
        ....
    
    ....
    bouton = Button(Frame_BOUTONS_1, text=(LISTE_BOUTONS[num_appli].upper()).replace("_", "\n"), background=LISTE_COULEURS[num_couleur],command= lambda NOM_APP=NOM_APP : CHOIX_APP(NOM_APP), font=font.Font(size=8, weight="bold"), height=2)
    comme ça je récupère le nom de l'appli et fais une vérif du nom dans la fonction CHOIX_APP qui elle lance la fonction correspondant à la bonne appli.

  6. #6
    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 gazou20 Voir le message
    J'ai finalement réussi à faire ce que je voulais.
    Maintenant qu'on sait ce qu'on veut, la solution serait d'utiliser globals():
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    def CHOIX_APP(NOM_APP):
         if (na := globals().get(NOM_APP)):
               na()
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Avril 2018
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2018
    Messages : 20
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Maintenant qu'on sait ce qu'on veut, la solution serait d'utiliser globals():
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    def CHOIX_APP(NOM_APP):
         if (na := globals().get(NOM_APP)):
               na()
    - W
    Merci pour la simplification, c'est top!

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

Discussions similaires

  1. affichage "dynamique" en ligne de commande
    Par neismarspra dans le forum C++
    Réponses: 3
    Dernier message: 22/02/2009, 01h30
  2. Commande - invite dynamique
    Par aurelie83 dans le forum SAP Crystal Reports
    Réponses: 3
    Dernier message: 19/12/2007, 13h34
  3. Réponses: 6
    Dernier message: 19/07/2007, 10h02
  4. Execution dynamique de commandes VBA
    Par Neilos dans le forum Général VBA
    Réponses: 1
    Dernier message: 10/08/2006, 12h56
  5. J'aimerais créer des boutons de commandes dynamiquement??
    Par STRUFIELD dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 06/12/2005, 20h52

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