web-dev-qa-db-fra.com

Affichage et masquage des widgets

Comment afficher et masquer les widgets dans Tkinter? Je veux avoir une boîte de saisie, mais ne pas la montrer en tout temps. Quelqu'un peut-il me montrer les fonctions pour afficher et masquer les widgets d'entrée et autres widgets dans tkinter? Je veux pouvoir le faire sans avoir plusieurs images.

20
udpatil

Cela a déjà été répondu sur stackoverflow . La réponse courte est que vous pouvez utiliser grid_remove ce qui entraînera la suppression du widget s'il a été précédemment ajouté via la grille. grid_remove Se souvient où se trouvait le widget, donc une simple grid() le remettra sans avoir à re-spécifier toutes les options.

Vous pouvez également utiliser pack_forget (si vous utilisez pack) et grid_forget (si vous utilisez grid). Ceux-ci fonctionnent de manière similaire à grid_remove, sauf qu'ils provoquent l'oubli de tous les paramètres, ce qui signifie que vous devez le replacer explicitement au bon endroit sur l'écran.

Une autre option consiste à tirer parti de l'ordre d'empilement des widgets. Vous pouvez utiliser la méthode lower pour masquer le widget derrière son parent et lift pour le soulever au-dessus. Voir cette réponse pour un exemple.

24
Bryan Oakley

J'ai essayé les suggestions que d'autres ont postées et j'ai remarqué que je faisais une simple erreur. Vous ne pouvez pas appeler .grid() sur la même ligne que vous déclarez le widget que vous allez masquer.

Pour clarifier, j'avais auparavant ceci:

self.helpExpansion = ttk.Label(self.helpMenu, text="Expansion Widget").grid(row=1, column=3, sticky=EW)
self.helpExpansion.grid_remove()

Mais j'ai eu l'erreur AttributeError: 'NoneType' object has no attribute 'grid_remove'. Pour y remédier, j'ai dû faire l'appel à .grid() sur une nouvelle ligne, comme ceci:

self.helpExpansion = ttk.Label(self.helpMenu, text="Help Expansion")
self.helpExpansion.grid(row=1, column=3, sticky=EW)
self.helpExpansion.grid_remove()

Ensuite, pour basculer entre l'affichage et le masquage, j'ai simplement alterné entre l'appel de self.helpExpansion.grid() (les arguments de fonction ne sont pas nécessaires) et self.helpExpansion.grid_remove().

Pour moi, cela a fonctionné avec tk.Label Ou ttk.Label. J'utilise Python 2.7.13. J'espère que ça aide!

3
Olivia Stork