web-dev-qa-db-fra.com

Comment se débarrasser de la fenêtre racine Python Tkinter?

Connaissez-vous un moyen astucieux de masquer ou d’éliminer de toute autre manière la fenêtre racine qui apparaît, ouverte par Tk()? Je voudrais juste utiliser un dialogue normal.

Dois-je ignorer la boîte de dialogue et placer tous mes composants dans la fenêtre racine? Est-ce possible ou souhaitable? Ou existe-t-il une solution plus intelligente?

49
Jonas Byström

Probablement la grande majorité des applications basées sur tk placent tous les composants dans la fenêtre racine par défaut. C'est le moyen le plus pratique de le faire puisqu'il existe déjà. Choisir de masquer la fenêtre par défaut et de créer la vôtre est une très bonne chose à faire, bien que cela ne demande que très peu de travail supplémentaire. 

Pour répondre à votre question spécifique sur la façon de le masquer, utilisez la méthode retire de la fenêtre racine:

import Tkinter as tk
root = tk.Tk()
root.withdraw()

Si vous souhaitez rétablir la visibilité de la fenêtre, appelez la méthode deiconify (ou wm_deiconify).

root.deiconify()

Une fois que vous avez terminé avec la boîte de dialogue, vous pouvez détruire la fenêtre racine avec tous les autres widgets tkinter avec la méthode destroy :

root.destroy()
68
Bryan Oakley

Je n'ai pas testé car je n'ai pas d'environnement Python/TKinter, mais essayez ceci.

En Tk pur, il existe une méthode appelée "wm" pour gérer les fenêtres. Là, vous pouvez faire quelque chose comme "wm retire .mywindow" où ".mywindow" est un niveau supérieur.

Dans TkInter, vous devriez pouvoir faire quelque chose de similaire à:

root = Tkinter.Tk()
root.withdraw() # won't need this

Si vous souhaitez rétablir la visibilité de la fenêtre, appelez la méthode deiconify (ou wm_deiconify). 

root.deiconify()
12
Carlos Tasada

Sous OSX, iconify semble mieux fonctionner:

root = Tkinter.Tk()
root.iconify()
5
qed

Si vous ne voulez pas qu'il y ait de "flash" lors de la création de la fenêtre, utilisez cette légère variation:

import Tkinter as tk
root = tk.Tk()
root.overrideredirect(1)
root.withdraw()
0
BuvinJ