Partage
  • Partager sur Facebook
  • Partager sur Twitter

Tkinter : Mettre une fenêtre au premier plan

Sous Mac, mais tous les conseils sont bienvenus !

Sujet résolu
    27 janvier 2011 à 16:44:05

    Bonjour !
    Voilà, je pense que tout est dit dans le titre :)
    En fait, il s'agit de l'ouverture d'une fenêtre qui demande confirmation pour quitter le programme, or elle s'ouvre derrière la fenêtre principale, et pour l'utilisateur, ça n'est pas très agréable de devoir bouger des fenêtres pour quitter le programme.
    J'aimerais donc savoir s'il existe une fonction permettant de mettre une fenêtre au premier plan :)

    Merci d'avance,
    Yakork
    • Partager sur Facebook
    • Partager sur Twitter

    Et voilà !

    Anonyme
      27 janvier 2011 à 18:06:23

      Tu devrais trouver ton bonheur du coté des méthodes en rapport aux focus des fenêtres et widgets. Et tu trouvera encore plus de bonheur en cherchant de la docs sur internet. Bien qu'elles ne datent pas toutes de la dernière pluie, elles ne sont pas complétements obselètes (et il y en a beaucoup en français qui plus est ;) ).
      • Partager sur Facebook
      • Partager sur Twitter
        27 janvier 2011 à 18:31:17

        Salut !

        Ce que tu cherches c'est la méthode Raise de wxWindow.
        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          27 janvier 2011 à 18:33:38

          Citation

          Ce que tu cherches c'est la méthode Raise de wxWindow.



          Il cherche pas pour Tkinter?

          Pour Tkinter à vue de nez je dirais la méthode grab_set() et focus_set() de Toplevel()

          • Partager sur Facebook
          • Partager sur Twitter
            27 janvier 2011 à 18:54:43

            Ah damned ! Je me suis mélangé les pinceaux ouaip, désolé. Du coup je suis allé me renseigner sur le net pour faire bonne figure... ^^

            Et c'est bien plus compliqué que je ne le pensais, raison de plus pour utiliser wxPython héhé :-°

            Enfin, apparemment des solutions existent mais sont liées à la plateforme sur laquelle tourne le programme... pour window il y a une indication sur ce forum en donnant un attribut à la fenêtre principale.

            root = Tk()
            root.wx_attributes("-topmost", 1)
            
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              27 janvier 2011 à 19:05:02

              En l'occurence je pense que les méthodes widgets.focus() ou toplevel.focus_force() (dans le cas où l'application entière n'a pas le focus) sont plus adaptées et plus simple. ;)

              Citation

              Et c'est bien plus compliqué que je ne le pensais, raison de plus pour utiliser wxPython héhé :-°


              C'est de bonne guerre... :lol:


              Edit:

              Toutes mes excuse à clic4 !

              Après quelques tests, je remarque qu'il y a deux comportements différents selon que la fenêtre secondaire s'ouvre en même temps que la principal ou après une action de l'utilisateur :
              from tkinter import *
              
              # En même temps :
              boss1 = Tk()
              soufifre1 = Toplevel(boss1)
              boss1.title('Boss1')
              soufifre1.title('Sous-fifre1')
              soufifre1.wm_attributes('-topmost', 1)
              boss1.mainloop()
              
              # Après une action de l'utilisateur :
              def get_soufifre(master):
                  soufifre2 = Toplevel(master)
                  soufifre2.title('Sous-fifre2')
                  soufifre2.focus()
              boss2 = Tk()
              boss2.title('Boss2')
              Button(boss2, text='Get soufifre', command=lambda: get_soufifre(boss2)).grid()
              boss2.mainloop()
              
              • Partager sur Facebook
              • Partager sur Twitter
              Anonyme
                27 janvier 2011 à 20:17:36

                from Tkinter import *
                
                def quitter():
                    fen = Toplevel(root)
                    fen.grab_set()
                    fen.focus_set()
                    b = Button(fen, text = "Ok", command = root.quit).pack()
                
                root = Tk()
                bouton = Button(root, text = "quitter", command=quitter).pack()
                root.mainloop()
                


                Ça fonctionne apparemment. La toplevel est en avant plan et la principale en arrière plan est inutilisable tant qu'il n'y a pas action sur le bouton appartenant à Toplevel.

                • Partager sur Facebook
                • Partager sur Twitter
                Anonyme
                  27 janvier 2011 à 20:42:56

                  Oui, cela fonctionne parce que c'est à l'utilisateur de faire apparaitre la seconde fenêtre, mais si les deux fenêtres s'ouvrent en même temps la principal reste devant et la seconde est en arriere plan malgrès le fait qu'elle ai le focus.

                  Mais bon, je vois pas trop l'utilité de démarrer les deux fenêtres en même temps. ^^
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Anonyme
                    27 janvier 2011 à 21:31:48

                    Encore faut il démontrer que les 2 fenêtres s'ouvrent en même temps.
                    • Partager sur Facebook
                    • Partager sur Twitter
                      27 janvier 2011 à 21:36:58

                      Merci à vous deux :)
                      Ta méthode marche plutôt bien pour le moment Fred1599.
                      Je passe au vert !
                      Yakork
                      • Partager sur Facebook
                      • Partager sur Twitter

                      Et voilà !

                      Tkinter : Mettre une fenêtre au premier plan

                      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                      • Editeur
                      • Markdown