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 :

Hiérarchie des fenêtres


Sujet :

Tkinter Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 758
    Par défaut Hiérarchie des fenêtres
    Bonjour à tous !

    Mon premier message sur ce forum . Je me suis lancé cette semaine dans la programmation en Python et j'ai un petit problème de hierarchie de fenêtres avec Tkinter dans mon application. J'ai isolé le problème dans un code un peu moins lourd:

    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
     
    from Tkinter import *
    from tkMessageBox import showinfo
     
    def Popup():
        top=Toplevel()
        popupbutton=Button(top,text="info",command=showinfo)
        popupbutton.pack()
        popupexit=Button(top,text="exit",command=top.destroy)
        popupexit.pack()		
     
    root=Tk()
     
    frame=Frame(root)
    frame.pack()
    button=Button(frame,text="Toplevel",command=Popup)
    button.pack()
     
    root.mainloop()
    le problème que j'ai est le suivant:

    Quand je clique sur le bouton Toplevel, une fenêtre apparait avec 2 boutons: info et exit.

    Quand j'appuie sur info il m'affiche une fenêtre d'information avec le bouton ok. Lorsque je clique sur ok, cette fenêtre disparait mais c'est la fenêtre root qui est au premier plan et qui est sélectionnée.

    comment puis je m'y prendre pour que lorsque je clique sur le ok de ma fenêtre info, le "focus" soit sur la fenêtre popup et pas la root ?

    question subsidiaire, est il possible de "désactiver" la fenêtre root dès que la fenêtre popup arrive ? de sorte qu'il soit impossible de lancer 2 instances de la fenêtre popup.

    J'ai essayé sans succès de jouer avec les méthodes lift, lower, focus_set... mais je n'ai pas réussi à trouver la bonne combinaison...

    Merci d'avance pour votre aide !

  2. #2
    Membre émérite
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 758
    Par défaut
    En me triturant un peu la tête je suis arrivé à cette solution... mais je ne sais pas si c'est très propre.

    Je ne règle pas vraiment l'odre des fenêtre dans le Window Manager mais au moins ça me cache la fenêtre root et ça me met le focus sur la fenêtre top après avoir fermé la fenêtre info.

    J'ai utilisé les méthodes withdraw et deiconify de Toplevel pour y arriver:

    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
     
    from Tkinter import *
    from tkMessageBox import showinfo
     
    def Popup():
    	Popup.top=Toplevel(root)
    	root.withdraw()
    	Popup.button=Button(Popup.top,text="info",command=Info)
    	Popup.button.pack()
    	Popup.exit=Button(Popup.top,text="exit",command=Quit)
    	Popup.exit.pack()
     
    def Info():
    	showinfo()
     
    def Quit():
    	Popup.top.destroy()
    	root.deiconify()
     
    root=Tk()
     
    frame=Frame(root)
    frame.pack()
    button=Button(frame,text="Toplevel",command=Popup)
    button.pack()
     
    root.mainloop()

  3. #3
    Membre chevronné
    Homme Profil pro
    Responsable du parc et des réseaux de télécommunication
    Inscrit en
    Mai 2003
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable du parc et des réseaux de télécommunication
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2003
    Messages : 290
    Par défaut
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    def Popup():
    	Popup.top=Toplevel(root)
    	Popup.top.focus_set() #Donne le focus au Toplevel
    	Popup.top.grab_set() #Intercepte les evenements
    	Popup.button=Button(Popup.top,text="info",command=Info)
    	Popup.button.pack()
    	Popup.exit=Button(Popup.top,text="exit",command=Quit)
    	Popup.exit.pack()

  4. #4
    Membre émérite
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 758
    Par défaut
    merci pour ta réponse pierjean.

    il me semble que j'avais testé ceci et que ça n'avait pas fonctionné et ça ne fonctionne toujours pas.

    je me demande si ça vient pas de mon os ou de ma version de python ?

    je suis sur Debian (etch) et python 2.4

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 25/07/2005, 14h58
  2. Comment récupérer la valeur d'un dbGrid dans des fenêtres MDI ?
    Par sylvie cl dans le forum Composants VCL
    Réponses: 5
    Dernier message: 19/07/2005, 13h42
  3. Empêcher le redimentionnement des fenêtres ????
    Par almisuifre dans le forum C++Builder
    Réponses: 5
    Dernier message: 03/01/2005, 09h15
  4. Liste des fenêtres ouvertes de IE
    Par Trash dans le forum C++Builder
    Réponses: 4
    Dernier message: 09/11/2003, 16h21

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