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 :

Afficher/Fermer une fenêtre avec le même bouton


Sujet :

Tkinter Python

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    etudiant
    Inscrit en
    Novembre 2014
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : etudiant
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2014
    Messages : 39
    Points : 31
    Points
    31
    Par défaut Afficher/Fermer une fenêtre avec le même bouton
    Est-il possible d'ouvrir et de fermer une fenêtre (la même) avec le même bouton ?

    Je me pose la question puisqu'il n'est possible d'utiliser qu'une seule 'command' par bouton n'est-ce pas ?

    Cordialement,


    Unic0

  2. #2
    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
    Salut,

    La "command" réfère à une fonction et la fonction fait le nécessaire.

    exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    mon_bouton = TrucButton('text', command=on_mon_bouton_click)
     
     
    def on_mon_bouton_click():
        si ma condition est vraie:
            fait ceci
        sinon:
            fait cela
        else:
            ignore

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    etudiant
    Inscrit en
    Novembre 2014
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : etudiant
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2014
    Messages : 39
    Points : 31
    Points
    31
    Par défaut
    Je comprends bien cela mon code est comme tel :

    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
     
     
    Fn_P = Tk()
     
    def Frm_Rq():
        Frame_Rq = Frame(Fn_P, bg='#9fd6c2', width=200)
        Frame_Rq.pack(side=TOP, pady=5, fill=BOTH)
        Button_Rq_Fermer = Button(
            Frame_Rq, image=Ico_Up, relief=GROOVE, command=Frame_Rq.destroy)
        Button_Rq_Fermer.place(x=0, y=0)
        Label_Rq = Label(Frame_Rq, text="Requête", bg='#9fd6c2')
        Label_Rq.pack(side=LEFT)
        Rq = Text(Frame_Rq, heigh=5, width=45)
        Rq.pack(side=LEFT)
        Frame_Rq_Butt = Frame(Frame_Rq, bg='#9fd6c2')
        Frame_Rq_Butt.pack(side=BOTTOM, padx=5)
        Button_Rq_Valid = Button(Frame_Rq_Butt, image=Ico_Check2, bg='#9fd6c2', relief=GROOVE, command=Fn_P.destroy)
        Button_Rq_Valid.pack(side=LEFT)
        Button_Rq_Erase = Button(Frame_Rq_Butt, image=Ico_Cross2, bg='#9fd6c2', relief=GROOVE, command=Fn_P.destroy)
        Button_Rq_Erase.pack(side=LEFT)
        Button_Rq_Rec = Button(Frame_Rq_Butt, image=Ico_Save2, bg='#9fd6c2', relief=GROOVE, command=Fn_P.destroy)
        Button_Rq_Rec.pack(side=LEFT)
     
    Butt_Nex = Button(Frame_Ico, image=Ico_Nex, command=Frm_Rq)
    Butt_Nex.grid(row=0, column=0)
    Et je souhaiterais pouvoir cliquer une fois sur mon bouton Butt_Nex pour faire apparaitre la fenetre puis recliquer dessus pour la faire disparaitre mais je vois pas trop comment faire ? (même au sein de la fonction Frm_Rq)

    Cordialement,

  4. #4
    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 ne pas modifier la commande associée au bouton?

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

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    etudiant
    Inscrit en
    Novembre 2014
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : etudiant
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2014
    Messages : 39
    Points : 31
    Points
    31
    Par défaut
    Je comprends parfaitement l'idée, le problème que j'ai c'est comment faire ! J'ai pensé faire entrer un paramètre :

    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
    def Frm_Rq(on):
    if on==0:
        Frame_Rq = Frame(Fn_P, bg='#9fd6c2', width=200)
        Frame_Rq.pack(side=TOP, pady=5, fill=BOTH)
        Button_Rq_Fermer = Button(
            Frame_Rq, image=Ico_Up, relief=GROOVE, command=Frame_Rq.destroy)
        Button_Rq_Fermer.place(x=0, y=0)
        Label_Rq = Label(Frame_Rq, text="Requête", bg='#9fd6c2')
        Label_Rq.pack(side=LEFT)
        Rq = Text(Frame_Rq, heigh=5, width=45)
        Rq.pack(side=LEFT)
        Frame_Rq_Butt = Frame(Frame_Rq, bg='#9fd6c2')
        Frame_Rq_Butt.pack(side=BOTTOM, padx=5)
        Button_Rq_Valid = Button(
            Frame_Rq_Butt, image=Ico_Check2, bg='#9fd6c2', relief=GROOVE, command=Fn_P.destroy)
        Button_Rq_Valid.pack(side=LEFT)
        Button_Rq_Erase = Button(
            Frame_Rq_Butt, image=Ico_Cross2, bg='#9fd6c2', relief=GROOVE, command=Fn_P.destroy)
        Button_Rq_Erase.pack(side=LEFT)
        Button_Rq_Rec = Button(
            Frame_Rq_Butt, image=Ico_Save2, bg='#9fd6c2', relief=GROOVE, command=Fn_P.destroy)
        Button_Rq_Rec.pack(side=LEFT)
    else :
    Frame_Rq.destroy
    Ca ne marche pas pour autant (avec la bonne indentation )

    C'est plus une question de logique je pense et de pratique :/

  6. #6
    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
    Et quelque chose dans ce genre:
    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
     
    def show_hide_frame():
        global Frame_Rq
        if Frame_Rq:
            destroy
            Frame_Rq = False
        else
            create
     
     
    def Frm_Rq():
        global Frame_Rq
        Frame_Rq = Frame(Fn_P, bg='#9fd6c2', width=200)
        ...
     
     
    Frame_Rq = False
    Butt_Nex = Button(Frame_Ico, image=Ico_Nex, command=show_hide_frame)

  7. #7
    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,

    Il y a plein de façons pour faire çà.
    Mais c'est un "détail" que vous pouvez mettre d'abord au point en dehors de votre code.
    Un exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    import tkinter as tk
     
    def toggle():
        if frame.grid_info():
            frame.grid_forget()
        else:
            frame.grid(row=1, column=0)
     
    frame = tk.Frame(height=100, width=100, bg='blue')
    frame.grid(row=1, column=0)
    tk.Button(text='next', command=toggle).grid(row=0, column=0)
    tk.mainloop()
    Dans ce cas, on se contente de regarder si "frame" est affichée ou pas sans détruire, re-créer.

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

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    etudiant
    Inscrit en
    Novembre 2014
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : etudiant
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2014
    Messages : 39
    Points : 31
    Points
    31
    Par défaut
    Merci beaucoup pour ces clarifications je vais essayer d'en faire une fonction générique utilisable pour tous mes boutons.

    Merci encore,

    Cordialement,

    Unic0

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

Discussions similaires

  1. Fermer une fenêtre avec un bouton
    Par keikoku84 dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 04/12/2014, 23h47
  2. Fermer une fenêtre avec un bouton
    Par labaf dans le forum Tkinter
    Réponses: 2
    Dernier message: 20/04/2013, 17h41
  3. Réponses: 3
    Dernier message: 26/05/2010, 17h45
  4. Fermer une fenêtre avec un bouton
    Par Sylv3D dans le forum Agents de placement/Fenêtres
    Réponses: 1
    Dernier message: 06/04/2010, 22h42
  5. Fermer une fenêtre avec flex builder
    Par pacopizz dans le forum Flash
    Réponses: 1
    Dernier message: 09/09/2008, 15h12

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