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

Python Discussion :

[Tkinter] Paramétrer un bouton sans nom dans une grille


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Webmaster
    Inscrit en
    Octobre 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2012
    Messages : 9
    Par défaut [Tkinter] Paramétrer un bouton sans nom dans une grille
    Bonjour tout le monde,

    Tout d'abord j'espère que je suis au bon endroit.

    J'aimerai faire des petits jeux de sociétés avec Tkinter, ma question est toute bête mais je n'ai pas trouvé la réponse après pas mal de recherche en FR comme en anglais. D'où le fait que je vienne poser ma question ici.

    J'utilise le module Tkinter pour réaliser des interfaces graphiques, avec une grille de boutons qui correspond à une surface d'un plateau, qui peut aller d'une grille 3x3 à même 12x12 --> j'ai réduit le nombre de lignes pour ne pas avoir à définir les X bouttons un par un, avec un simple for in range. Mon premier exercice (réussi) était de trouver la position de chaque bouton dans la grille, j'ai utilisé un lambda ou une fermeture et cela fonctionne bien. Cependant les boutons que je crée n'ont pas de nom car je ne peux pas (ou ne sais pas encore comment) définir de nom de variable en série et avec une limite indéfinie.

    J'arrive désormais à mon problème, dans un jeu avec des pions, ces derniers se déplacent de cases en cases, l'objectif est quand je clique sur une case, la case sur laquelle j'appuie change de texte (devienne vide par exemple) mais comme je n'ai pas pu donner de nom à mes boutons à cause de la création de boutons par grille, ils n'ont pas de noms, et donc je ne peux pas faire boutonX.set('text' = ...).

    Comment paramétrer un bouton qui n'a pas de nom ? Ou comment lui donner un nom que je puisse retrouver par la suite ? Ou alors plus simplement comment paramétrer un bouton sur lequel je clique (comme un self).


    Mon code :
    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
     
    import tkinter as tk
    from tkinter import Tk, Label
    from tkinter import *
    from functools import partial
    from tkinter.messagebox import *
     
    tableau = [
        [0, 1, 2],
        [3, 4, 5],
        [6, 7, 8]
    ]
     
    #def fermeture(x):
    def test(x):
        resultat.set(f'{x}')
        boutton.config(text='SL ') # ---> Ligne où je souhaites reconfigurer le 'text' de n'importe quel bouton sur lequel je clique, bien evidemment le "boutton" n'est pas défini donc erreur ici
        #return test (si on utilise la fermeture)
     
    root = Tk()
     
    resultat = StringVar()
    resultat.set("Clik sur un bouton.")
    Label(root, textvariable=resultat).grid(row=10, column=10)
     
    for ligne in range(3):
        for cell in range(3):
            tk.Button(root, text="case{}{}".format(ligne, cell), command=lambda ligne=ligne, cell=cell: test((ligne, cell))).grid(row=ligne, column=cell)
     
    root.mainloop()
    Voilà merci à tous si vous voulez que je complète certains points n'hésitez pas !

  2. #2
    Membre expérimenté
    Homme Profil pro
    Analyse système
    Inscrit en
    Novembre 2008
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyse système
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Novembre 2008
    Messages : 227
    Par défaut
    Pourquoi n'essaierais tu pas de stocker tous les boutons que tu crées dans une liste.
    Après tu parcours ta liste pour savoir lequel est activé et réagir en conséquence.

  3. #3
    Membre habitué
    Homme Profil pro
    Webmaster
    Inscrit en
    Octobre 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2012
    Messages : 9
    Par défaut
    Salut AF,

    edit : je vais voir ce que je peux faire là dessus :') je reviens vers vous.

  4. #4
    Membre expérimenté
    Homme Profil pro
    Analyse système
    Inscrit en
    Novembre 2008
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyse système
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Novembre 2008
    Messages : 227
    Par défaut
    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
     
    import tkinter as tk
    from tkinter import Tk, Label
    from tkinter import *
    from functools import partial
    from tkinter.messagebox import *
     
    tableau = [
        [0, 1, 2],
        [3, 4, 5],
        [6, 7, 8]
    ]
     
    #def fermeture(x):
    def test(x):
        print(x)
        resultat.set(f'{x}')
        index = x[0]*3 + x[1]
        print(index)
        Boutons[index].config(text='SL ')   # ---> Ligne où je souhaites reconfigurer le 'text' de n'importe quel bouton sur lequel je clique, bien evidemment le "boutton" n'est pas défini donc erreur ici
                                            #return test (si on utilise la fermeture)
     
    root = Tk()
     
    resultat = StringVar()
    resultat.set("Clik sur un bouton.")
    Label(root, textvariable=resultat).grid(row=10, column=10)
     
    Boutons = []
    for ligne in range(3):
        for cell in range(3):
            button = tk.Button(root, text="case{}{}".format(ligne, cell), command=lambda ligne=ligne, cell=cell: test((ligne, cell)))
            button.grid(row=ligne, column=cell)
            Boutons.append(button)
     
    root.mainloop()

  5. #5
    Membre expérimenté
    Homme Profil pro
    Analyse système
    Inscrit en
    Novembre 2008
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyse système
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Novembre 2008
    Messages : 227
    Par défaut
    Après pour les petits jeux simples, la librairie PyGame est plutôt efficace et assez simple d'accès.

  6. #6
    Membre habitué
    Homme Profil pro
    Webmaster
    Inscrit en
    Octobre 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2012
    Messages : 9
    Par défaut
    Superbe merci beaucoup !

    Cela fonctionne chez moi aussi, en tout cas j'ai pas du tout pensé à utiliser les instances 0_o j'espère que ça servira aussi à d'autres ! Je clôture !

    Pour PyGame oui je vais sûrement essayer bientôt.

  7. #7
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 743
    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 743
    Par défaut
    Citation Envoyé par PolouDC Voir le message
    Comment paramétrer un bouton qui n'a pas de nom ? Ou comment lui donner un nom que je puisse retrouver par la suite ? Ou alors plus simplement comment paramétrer un bouton sur lequel je clique (comme un self).
    Si on fait un root.bind('<1>', on_click), lorsqu'on clique, on_click sera appelé avec event en paramètre et le widget/button dans event.widget.

    Les widgets étant affichés via grid, la méthode .grid_info appliquée à ce widget retourne un dictionnaire où récupérer la position (row, column).

    Il est clair qu'on peut beaucoup refaire à sa sauce: c'est bien plus facile de comprendre ce qu'on a écrit que de se plier à apprendre à jouer/construire avec ce que tkinter offre.

    Pour plus de flexibilité (côté jeu), utilisez un Canvas et créez vos propres Button (emplacements qui réagissent au clicks). Et si on clique sur un tableau de MxN cases à la position (x, y), il suffit de diviser par les dimensions des côtés d'une case pour récupérer ligne/colonne.

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

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

Discussions similaires

  1. bouton dans une grille tkinter
    Par furious___ dans le forum Tkinter
    Réponses: 6
    Dernier message: 03/04/2021, 11h22
  2. [XL-2003] Repartition automatique de noms dans une grille de planning
    Par Dhumkazaar dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 01/07/2010, 11h14
  3. Réponses: 0
    Dernier message: 26/09/2009, 16h12
  4. Changement de nom dans une interface
    Par memed dans le forum Oracle
    Réponses: 6
    Dernier message: 27/10/2005, 18h20
  5. [XSD] Elements de meme nom dans une sequence
    Par MathiasM dans le forum Valider
    Réponses: 2
    Dernier message: 14/04/2005, 09h33

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