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 :

supression BUTTON TKinter


Sujet :

Tkinter Python

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 62
    Par défaut supression BUTTON TKinter
    Bonjour,

    j'ai crée sur ma page d'accueil des boutons. Est il possible de les supprimer après dans le programme car je change l'organisation visuelle de ma page en fonction des évènements. Pour les images, j'utilise :
    can1.delete(item)

    mais pour les buttons ? cela existe ou il faut redéfinir une nouvelle fenêtre ?

    François

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    222
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 222
    Par défaut
    Tu peux utiliser la méthode destroy().
    Si tu souhaites juste déplacer des éléments, il vaut mieux utiliser grid_forget() ou pack_forget() qui ont pour effet de faire disparaitre le widget sans le détruire. Tu peux ensuite utiliser grid() ou pack() pour le réafficher à l'endroit voulu.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 62
    Par défaut
    quelle est la syntaxe exacte ?
    si dans mon programme j'ai :

    b1 = Button(accueil, text = '3 joueurs', command = j3)

    puis dans le ss prog évènement j'écris :

    def j3():
    global b1
    Button.destroy(b1)

    cela ne fait rien. Le bouton b1 reste affiché

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    222
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 222
    Par défaut
    Je viens de tester, chez moi ça marche très bien.
    Voici le code que j'ai utilisé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    from Tkinter import *
     
    def supprimer():
        bouton.destroy()
     
    fen = Tk()
    bouton = Button(fen, text='test')
    boutonDestroy = Button(fen, text='Destroy', command=supprimer)
    bouton.pack()
    boutonDestroy.pack()
    fen.mainloop()
    Si tu veux seulement déplacer des widgets, comme je disais plus haut, il vaut mieux utiliser pack_forget ou grid_forget comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    from Tkinter import *
     
    def bouger():
        bouton.pack_forget()
        bouton.pack(side=LEFT)
    fen = Tk()
    bouton = Button(fen, text='test')
    boutonDestroy = Button(fen, text='Bouger', command=bouger)
    bouton.pack()
    boutonDestroy.pack()
    fen.mainloop()

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 62
    Par défaut
    J'ai testé ton code. Effectivement çà marche. Par contre, rien à faire avec mon programme.

    from Tkinter import *

    accueil = Tk()

    def j3():
    b1.destroy()

    b1 = Button(accueil, text = '3 joueurs', command = j3, padx = 40, pady = 20).pack(side = LEFT)
    b2 = Button(accueil, text = 'Quitter', command = accueil.quit, padx = 40, pady = 20).pack(side = RIGHT)

    accueil.mainloop()
    accueil.destroy()

    il ne m'efface rien du tout je ne comprends pas pourquoi !

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    222
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 222
    Par défaut
    C'est normal, si tu fais b1 = Button(accueil, text = '3 joueurs', command = j3, padx = 40, pady = 20).pack(side = LEFT), b1 vaut None. Tu essayes donc de supprimer un None. Cette syntaxe est a utiliser seulement si tu n'as besoin de récupérer l'instance, sinon il faut faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    bouton = Button(fen, text='Destroy', command=supprimer)
    bouton.pack()

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 62
    Par défaut
    Merci Niko pour ta réponse. J'ai compris pour la syntaxe mais pas sur le fond. Je ne vois pas la différence en fait. Pourquoi dans mon cas j'avais crée un "NONE" et pas dans le second cas en mettant le b1.pack() à la ligne ?

  8. #8
    Membre expérimenté
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    222
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 222
    Par défaut
    Ce sont les bases de la programmation objet.
    Si tu fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monBouton = Button(fen, text='Destroy', command=supprimer)
    Tu créés une instance de monBouton et tu peux alors utiliser toutes les méthodes de la classe Bouton (pack, grid...).
    Si tu fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monBouton = Button(fen, text='Destroy', command=supprimer).pack()
    Tu récupères la valeur retournée par la méthode pack(). Vu que pack() ne retourne aucune valeur, alors monBouton vaut None
    .
    J'espère avoir été assez clair. Si tout ça est un peu abstrait pour toi, je conseil de lire ça.

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 62
    Par défaut
    Merci Nyko,

    j'ai enfin compris. Tout arrive
    je n'aurai jamais trouvé çà seul en tout cas
    Même que cela marche maintenant dans mon programme

  10. #10
    Membre expérimenté
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    222
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 222
    Par défaut
    ba je suis content d'avoir pu t'aider, peut être à une prochaine fois.

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

Discussions similaires

  1. [Tkinter] Button, lambda et boucle : effet indesirable
    Par KINENVEU dans le forum Tkinter
    Réponses: 6
    Dernier message: 24/09/2011, 08h56
  2. [Tkinter] push-pull button
    Par pfeuh dans le forum Tkinter
    Réponses: 1
    Dernier message: 06/05/2010, 11h25
  3. Tkinter.Button : passer et récupérer des valeurs
    Par Loïc B. dans le forum Tkinter
    Réponses: 4
    Dernier message: 20/11/2008, 20h48
  4. Tkinter: Button sur Image
    Par xEndLe dans le forum Tkinter
    Réponses: 1
    Dernier message: 04/04/2007, 19h39
  5. [Tkinter] Button connecté, avec ou sans paramètres??
    Par Sunsawe dans le forum Tkinter
    Réponses: 3
    Dernier message: 12/03/2006, 11h55

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