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 :

Problème de fonction


Sujet :

Tkinter Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2013
    Messages : 5
    Par défaut Problème de fonction
    Bonjour je veux modifier le tittre d'un boutton je n'arrive pas.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par zoz25 Voir le message
    Bonjour je veux modifier le tittre d'un boutton je n'arrive pas.
    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
     
    def afficher_grille(grille):
     
        """ """
        for k in range(2,len(grille)-1):
            for t in range(2,len(grille[0])-1):
                #grille[k][t] = Button(demineur,text=' ',command =)
     
                if grille[k][t] == 9:
                    grille[k][t] = Button(demineur,text='9',command =perdu)
                    grille[k][t].grid(row =k,column=t)
                if grille[k][t] == 8:
                    grille[k][t] = Button(demineur,text=' ')
                    grille[k][t].grid(row =k,column=t)
                    def nb8(k,t):
                        grille[k][t].configure(text="8")
                    grille[k][t].configure(command =nb8(k,t))
    La fonction nb8 est exécuter directement sans appuyer sur le bouton et change directement le nom. Même quand je met un lambda cela ne marche toujours pas car le k et t sont temporaire et donc quand on appui sur le bouton, il change la nom d'une autre case.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    grille[k][t].configure(command =lambda : nb8(k,t))
    Il n'y aura pas une solution pour modifier le nom d'un boutons d'une grille ?
    Bonjour,

    Une fonction lambda, c'est une fonction anonyme (qui n'a pas de nom), mais comme toute fonction elle accepte des arguments en paramètres.

    Vous tenez presque la solution, réfléchissez encore un peu et vous allez trouver.

    @+.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2013
    Messages : 5
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grille[k][t].configure(command =lambda : grille[k][t].configure(text="0"))
    J'ai essayer mais ça ne fonctionnent toujours pas.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par zoz25 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grille[k][t].configure(command =lambda : grille[k][t].configure(text="0"))
    J'ai essayer mais ça ne fonctionnent toujours pas.
    Svp, relisez ce que je viens de vous indiquer : c'est lambda qui peut accepter des arguments de fonction, comme n'importe quelle autre fonction.

  5. #5
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    Si tu expliquais ce que tu veux faire plus exactement, peut-être qu'une solution plus simple serait envisageable.

    En lisant ton code, je vois que tu as une liste (de listes) de chiffres et qu'il est question d'un démineur, on situe le décor, ok.

    Tu itères sur ta liste et tu remplaces chaque chiffre par un bouton, dont tu ne veux pas afficher le texte directement mais seulement après click, normal.

    Jusque là je devine, sauf pour la valeur "9" que tu affiches directement. Erreur ?

    Et tu comptais faire de même pour chacune des valeurs de 8 à 1 ?


    Simplifions, on crée un dictionnaire, on y met pour clefs les instances des boutons et pour valeur celle données par la grille de départ.

    Grosso-modo ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    buttons = {}
    def afficher_grille(grille):
        global buttons
        for k in range(2,len(grille)-1):
            for t in range(2,len(grille[0])-1):
                button = Button(demineur,text='', lambda: pressed(button))
                buttons[button] = grille[k][t]
     
     
    def pressed(btn):
        global buttons    
        print buttons[btn]
    Et dans la fonction pressed(), selon la valeur donnée par le dico, tu affiche le texte, ce qui est aisé puisque l'argument btn est l'instance du bouton ou bien (valeur 9) tu appelles ta fonction game_over()

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

Discussions similaires

  1. C++ Problème de fonctions et pointeurs
    Par zmatz dans le forum C++
    Réponses: 3
    Dernier message: 01/10/2005, 16h20
  2. [MFC][WINSOCK] Problème avec fonction recv
    Par Le Farfadet dans le forum MFC
    Réponses: 4
    Dernier message: 23/09/2005, 11h00
  3. Problème de fonction
    Par Anduriel dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 26/05/2005, 20h30
  4. Problème avec fonction d'envoie de mail
    Par zyg dans le forum Réseau/Web
    Réponses: 1
    Dernier message: 23/02/2005, 08h48
  5. [Requête] Problème avec fonction "DATE_FORMAT()"
    Par sekiryou dans le forum Requêtes
    Réponses: 4
    Dernier message: 11/01/2005, 21h52

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