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 le texte d'un bouton [Tkinter]


Sujet :

Tkinter Python

  1. #1
    Futur Membre du Club
    Homme Profil pro
    etudiant
    Inscrit en
    Janvier 2019
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : etudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 18
    Points : 6
    Points
    6
    Par défaut Modifier le texte d'un bouton [Tkinter]
    Bonjour, je suis débutant en Python. J'essaye de programmer le démineur en Python avec l'aide de Tkinter.
    J'ai donc une grille de 9x9 boutons. J'ai une fonction qui renvoie correctement le nombre de bombe autour d'une case lorsque qu'on appuie sur le bouton . Je voudrais alors afficher cette valeur dans la grille,
    Pour moi le plus simple était de renommer le bouton avec cette valeur, mais je n'y arrive pas après de nombreuses recherches sur internet.

    Le code est un peu brut je vais essayer d'éclaircir quelques points:

    J'ai une liste de bouton Blist [x] [y]

    La fonction test(x,y) renvoi nbomb c'est la variable qui nous intéresse. je bloque donc a la ligne 12:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Blist [(x-1)][(y-1)].config(text=nbomb)
    le message d'erreur:
    'int' object has no attribute 'config'
    j'ai déjà essayé avec: Blist [(x-1),(y-1)].config(text=nbomb) et le message d'erreur change:
    'int' object is not callable
    Voila merci à ceux qui apporterons leur aide.
    Gabin

    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    import numpy as np
    from tkinter import *
    from random import *
     
    fenetre = Tk()
    M=np.zeros((11,11),int)       #Création grille de bombes
    for x in range(1,10):
        for y in range(1,10):
            M[x,y]=randint(1,10)
            if M[x,y] > 1:
                M[x,y] = 0
    Blist = [[0 for k in range(1,10)] for i in range(1,10)]
     
    for x in range(1,10):          #Grille des boutons
        tmp = []
        for y in range(1,10):
            tmp.append(Button(fenetre, text='    ', borderwidth=1,command=lambda x=x, y=y:appuie(x,y)).grid(row=x, column=y))
        Blist.append(tmp)   
     
    def perdu():
        fenetreperdu = Tk()
        textperdu = Label(fenetreperdu,text='Vous avez perdu').pack()
        boutonperdu = Button(fenetreperdu,text='Quitter',command=quit).pack()
     
    def test(x,y):
        nbomb=0
        if M[x+1,y] == 1:
                nbomb = nbomb + 1
        if M[x+1,y-1] == 1:
                nbomb = nbomb + 1
        if M[x,y-1] == 1:
                nbomb = nbomb + 1
        if M[x-1,y-1] == 1:
                nbomb = nbomb + 1
        if M[x-1,y] == 1:
                nbomb = nbomb + 1
        if M[x-1,y+1] == 1:
                nbomb = nbomb + 1
        if M[x,y+1] == 1:
                nbomb = nbomb + 1
        if M[x+1,y+1] == 1:
                nbomb = nbomb + 1
        Blist [(x-1)][(y-1)].config(text=nbomb)
        if testgg() == True:
            gg()
     
    def testgg():           
        return True
        for x in range(1,10):
            for y in range(1,10):
                if M[x,y] == 0:
                    return False
    def gg():
        fenetregg = Tk()
        textgg = Label(fenetreperdu,text='Vous avez gagné !').pack()
        boutongg = Button(fenetreperdu,text='Quitter',command=quit).pack()
     
    def appuie(x,y):
        if M[x,y]== 1:
            perdu()
        else:
            M[x,y] = 1
            test(x,y)

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

    Pourquoi affirmer que:
    Citation Envoyé par legomanfr Voir le message
    Le code est un peu brut je vais essayer d'éclaircir quelques points:

    J'ai une liste de bouton Blist [x] [y]
    alors que Python vous dit que ce sont des 'int'?

    Python a toujours raison...
    Si vous en doutez, il suffit de faire un print(Blist) quelque part pour vous en assurer.

    Allez je vous aide un peu côté tkinter, si vous écrivez: a = Button(....), la variable a sera associée à un Button.
    Par contre en écrivant a = Button(....).grid(...), la variable a sera associée à None.

    - 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
    etudiant
    Inscrit en
    Janvier 2019
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : etudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 18
    Points : 6
    Points
    6
    Par défaut
    Bien, tout d’abord merci de la réponse rapide.

    Donc pour que ma liste soit rempli avec des «*Button*» et non des «*entiers*» il faut que j’enleve le .grid après les boutons, mais si j’enleve le .grid plus aucuns boutons apparaissent sur ma fenêtre... je suis vraiment perdu et puis pourquoi le .grid renvoie un entier, qu’est-ce que grid signifie exactement ?

  4. #4
    Membre confirmé

    Homme Profil pro
    Bidouilleur
    Inscrit en
    Avril 2016
    Messages
    721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Avril 2016
    Messages : 721
    Points : 503
    Points
    503
    Billets dans le blog
    1
    Par défaut
    Salut.

    En premier, tu ajoutes tes boutons à ta liste, puis ensuite soit tu parcours ta liste pour grid tes boutons, soit tu gères au cas par cas si le grid est plus complexe en accédant à chaque boutons de ta liste via des indices.
    Le temps ronge l'amour comme l'acide.

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,
    Citation Envoyé par legomanfr Voir le message
    Donc pour que ma liste soit rempli avec des «*Button*» et non des «*entiers*» il faut que j’enleve le .grid après les boutons
    C'est nécessaire mais pas suffisant. Car si vous avez eu la curiosité de faire un "print" de cette liste, vous y auriez trouvé des entiers puis d'autres choses.

    Citation Envoyé par legomanfr Voir le message
    , mais si j’enleve le .grid plus aucuns boutons apparaissent sur ma fenêtre...
    Et comme vous ne pouvez plus "cliquer" dessus, plus de callback qui plante.

    Citation Envoyé par legomanfr Voir le message
    je suis vraiment perdu et puis pourquoi le .grid renvoie un entier, qu’est-ce que grid signifie exactement ?
    "grid" ne renvoie pas un entier mais None. Ce que çà fait est décrit dans toutes les documentations tkinter.
    Après plutôt que de partir bille en tête a vouloir créer un tableau de Button, commencez par jouer avec un seul Button, une liste de Button pour être un peu plus en confiance avant de vous lancer à vouloir créer un tableau...
    Si vous ne maîtrisez des constructions plus simples, vous serez vite perdu...

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

Discussions similaires

  1. Tkinter - modifier le texte d'un bouton en cliquant dessus
    Par KonTiKI dans le forum Général Python
    Réponses: 6
    Dernier message: 21/05/2015, 11h37
  2. [XL-2003] Modifier le texte sur un bouton affecté à une macro
    Par Un Internaute dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 23/10/2014, 17h46
  3. [XL-2003] Modifier le texte d'un bouton macro
    Par peofofo dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 19/01/2010, 19h00
  4. Modifier le texte d'un bouton (Caption) dans une document
    Par ouskel'n'or dans le forum Contribuez
    Réponses: 0
    Dernier message: 27/08/2008, 09h47
  5. [C#] Modifier le text des boutons dans un datagrid
    Par Le-Cortex dans le forum ASP.NET
    Réponses: 3
    Dernier message: 11/01/2006, 10h17

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