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 :

Perte de focus sur fenêtre TopLevel


Sujet :

Tkinter Python

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

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 28
    Points : 9
    Points
    9
    Par défaut Perte de focus sur fenêtre TopLevel
    Bonsoir,

    Mon application principale possède un bouton qui permet d'ouvrir un TopLevel, celui-ci arrive au premier plan grâce au focus. Dans ce TopLevel je permet à l'utilisateur d'ouvrir un explorateur grâce à TkFiledialog. Elle arrive au premier plan elle aussi mais une fois le choix du fichier fait, je ne retombe pas sur ma fenêtre TopLevel mais sur mon application principale. La TopLevel étant partie au dernier plan.

    Comment empêcher ce comportement ?

    Merci

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 333
    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 333
    Points : 36 853
    Points
    36 853
    Par défaut
    Salut,
    Mon application principale possède un bouton qui permet d'ouvrir un TopLevel, celui-ci arrive au premier plan grâce au focus.
    Lorsque le Toplevel s'ouvre il vient "par dessus" le reste par défaut., le focus désigne la windows qui récupère les events.
    Dans ce TopLevel je permet à l'utilisateur d'ouvrir un explorateur grâce à TkFiledialog.
    La window qui a le focus attrape les actions de l'utilisateur et déclenche éventuellement la création de Windows "modales" telle que TkFiledialog.
    mais une fois le choix du fichier fait, je ne retombe pas sur ma fenêtre TopLevel mais sur mon application principale. La TopLevel étant partie au dernier plan.
    C'est facile à reproduire mais hors contexte, çà ne va peut être pas vous aider:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> import tkinter as tk
    >>> app = tk.Tk()
    >>> top = tk.Toplevel()
    >>> dialog = tk.Toplevel()
    Vous avez alors l'empilement des 3 windows app, top, dialog.
    Si vous fermez dialog, app passe devant.
    Ce qui est "normal": top et dialog sont fils de "app", création et destruction passent par la parentèle comme dans toute hiérarchie qui se respecte.

    Recréez dialog et ajoutez:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    >>> top.wait_window(dialog)
    ca crée une relation entre "dialog" et "top" disant "pour la suite c'est par là".

    Il y a plein de façons de réaliser cela (j'ai choisi la plus simple pour "illustrer" le phénomène) et .wait_window n'est peut être pas adapté dans votre cas.
    - W

    Comment "modifier" le défaut dans votre cas: il

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

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 28
    Points : 9
    Points
    9
    Par défaut
    Merci pour les définitions.

    Je comprends l'exemple cependant les TkFileDialog ne sont pas instanciés comme des fenêtres, on a juste accès à ce qu'elles retournent à savoir des paths. Comment créer ce système d'attente ?

    Je précise que je suis débutant, j'apprends en améliorant mon application, je ne connais pas toutes les ficelles de python..

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 333
    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 333
    Points : 36 853
    Points
    36 853
    Par défaut
    Citation Envoyé par Nainpoleon Voir le message
    Merci pour les définitions.
    Une description en français écrite par un débutant n'est pas très lisible: il faut reformuler pour savoir si on a bien compris. En postant du code, c'est beaucoup plus clair même si la description est mal formulée.

    Je comprends l'exemple cependant les TkFileDialog ne sont pas instanciés comme des fenêtres, on a juste accès à ce qu'elles retournent à savoir des paths. Comment créer ce système d'attente ?
    J'ose espérer que lorsque votre programme appelle la fonction TkFileDialog vous avez bien une fenêtre qui s'ouvre avec des compartiments à l'intérieur. La fonction ne retourne pas une instance mais conduit à la création d'une fenêtre modale et instancie un Toplevel quelque part. S'il y a Toplevel, comment pourrait être construite l'association avec son parent?
    Mon exemple montre juste que çà joue un rôle sur le comportement de l'application après sa destruction (et le retour de la fonction). Si c'est une fonction, çà se passe probablement via des paramètres d'appel ou globaux.

    Je précise que je suis débutant, j'apprends en améliorant mon application, je ne connais pas toutes les ficelles de python..
    Regardez a documentation de TkFileDialog, il y a peut être un paramètre "parent". Vous ne comprendrez pas tout mais ce n'est pas grave. L'important sera la motivation que vous aurez pour tester ce qui se passe en jouant avec - dans votre code ou sur des exemples -.

    Et jusqu'ici, pas beaucoup de ficelles "Python"
    - W

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

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 28
    Points : 9
    Points
    9
    Par défaut
    Je reviens de week end, désolé pour l'attente.

    Effectivement la solution était toute simple, un petit coup de lecture sur les options du tkFIledialog pour s'aperçevoir qu'il suffisait de renseigner le paramètre parent .

    Merci pour votre aide !

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

Discussions similaires

  1. Outlook et perte du focus sur une fenêtre
    Par Abac_Angelique dans le forum API, COM et SDKs
    Réponses: 0
    Dernier message: 16/07/2013, 18h28
  2. Perte de focus sur une fenêtre modale
    Par yonpo dans le forum Windows Presentation Foundation
    Réponses: 4
    Dernier message: 07/01/2011, 14h32
  3. Perte du focus sur l'application
    Par ithel dans le forum Flex
    Réponses: 1
    Dernier message: 15/10/2009, 13h24
  4. Problème de focus sur fenêtre d'erreur
    Par Djoul dans le forum VBScript
    Réponses: 1
    Dernier message: 08/07/2008, 16h24
  5. JTable perte de Focus sur une Cellule
    Par La_Bande_A_Zozo dans le forum Composants
    Réponses: 1
    Dernier message: 25/07/2007, 17h32

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