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] Repérer un "individu" donné dans une grille


Sujet :

Python

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Décembre 2012
    Messages : 9
    Points : 6
    Points
    6
    Par défaut [TKinter] Repérer un "individu" donné dans une grille
    Bonjour à tous
    Je suis un débutant-novice en Python, et je souhaiterai solliciter votre aide pour une question.

    J'ai crée une grille de boutons grâce au code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for n in range((M+1)*N):
        col, row = n//N, n%N
        root[col,row] = Button(root[2], text=txt[n],
                         command=lambda cell=(col,row): cb_cell(cell))
        root[col,row].grid(column=col, row=row, padx=2, pady=2)
    avec M et N rentrés par l'utilisateur par un Input
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    root, cols, rows = {0: Tk()}, 'ABCDEFGHIJKLMNOPQRST', '123456789'
    Mon but est de créer un callback qui permette de trouver dans cette grille un bouton en particulier !
    Par exemple, je désire repérer le bouton dont le texte est D4.

    Comment puis-je m'y prendre ?
    Merci d'avoir lu

  2. #2
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 798
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 798
    Points : 7 066
    Points
    7 066
    Par défaut
    Le principe est de rajouter tes objets (tes boutons) dans une liste, et de parcourir cette liste pour tester les textes de tes boutons.

    Exemple testé vite fait

    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
    >>> from Tkinter import *
    >>> liste_boutons = []
    >>> 
    >>> root = Tk()
    >>> 
    >>> for i in range(3):
    ...     nom = raw_input("Entrer le nom du bouton :")
    ...     bout = Button(root, text=nom)
    ...     bout.pack()
    ...     liste_boutons.append(bout)
    ... 
    Entrer le nom du bouton :D1
    Entrer le nom du bouton :D2
    Entrer le nom du bouton :D3
    >>> 
    >>> liste_boutons
    [<Tkinter.Button instance at 0x7fec82e034d0>, <Tkinter.Button instance at 0x7fec82e133b0>, <Tkinter.Button instance at 0x7fec82e135f0>]
    >>> for bouton in liste_boutons:
    ...     if bouton["text"] == "D3":
    ...         bouton.destroy() # destruction du bouton dont le texte est "D3"
    ...
    Edit : En assumant le fait qu'on soit sous python 2.x, avec la version 3.x, on transforme raw_input() en input()
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

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

    Mon but est de créer un callback qui permette de trouver dans cette grille un bouton en particulier !
    Par exemple, je désire repérer le bouton dont le texte est D4.
    En supposant que le texte des différents Button est différent, pourquoi ne créer un dict avoir pour clé le "text" et valeur le Button?

    Après la question est de savoir quel événement déclenche le callback et comment il récupère "D4"
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Décembre 2012
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    En effet W le texte des boutons est différent à chaque fois

    J'ai crée une liste qui croise ABCD avec 1234, on a ainsi une grille comme celle que je vous montre en pièce jointe (elle a été mélangée)

    Mon but est de pouvoir déplacer par exemple le bouton B1 dans le vide à droite du bouton A1.

    J'ai donc pensé créer un callback qui va s'occuper de "trouver" A1 et un callback pour faire bouger B1 dans le trou
    Le deuxième je pense que je l'ai fait à peu près bien mais impossible de le vérifier car j'ai besoin du 1er pour l'utiliser!

    Voilà je tenais à expliquer clairement car c'est difficile sinon haha
    Merci de vos réponses en tous cas
    Images attachées Images attachées  

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 273
    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 273
    Points : 36 757
    Points
    36 757
    Par défaut
    Mon but est de pouvoir déplacer par exemple le bouton B1 dans le vide à droite du bouton A1.
    Plutôt que de "bouger" les boutons, il sera peut être plus simple de modifier le texte que contiennent les boutons.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Décembre 2012
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Oui, désolé je me suis mal exprimé; en effet, je souhaite modifier le texte des boutons

  7. #7
    Expert éminent

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Citation Envoyé par Helpingna Voir le message
    Oui, désolé je me suis mal exprimé; en effet, je souhaite modifier le texte des boutons
    - Le texte du bouton lui donne-t-il un sens spécifique pour l'utilisateur ? J'entend par là que le bouton B1 démarre toujours le lave-vaisselle et le bouton D4 ouvre toujours la porte du garage ?

    - Ces boutons émettent des signaux ?

    - Ces signaux les identifient ils ? Ce que l'on peut croire au vu de:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    command=lambda cell=(col,row): cb_cell(cell)
    Si oui il faudra faire un peu plus que changer simplement le texte.


    Si je pense à cela c'est parce que changer le texte des boutons est extrêmement banal, garder la cohérence des fonctions de ces boutons est autre chose.

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Décembre 2012
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Merci à tous
    grâce à vos réponses, j'ai réussi à faire ce que je voulais

    mais ... j'ai une autre question sur un autre sujet hihi

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 18/12/2010, 21h31
  2. afficher données dans une grille
    Par faycalche dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 22/08/2008, 15h15

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