2010-10-01 4 views
6

Avec ce code, la fenêtre est de 500 par 500, ce qui est ce que je vais pour:Pourquoi le cadre Tkinter est-il redimensionné lorsque la zone de texte est ajoutée?

from tkinter import * 
root = Tk() 

frame = Frame(root, width=500, height=500) 

frame.pack() 
root.mainloop() 

Quand j'ajouter une zone de texte au cadre, cependant, il se réduit à seulement la taille du texte boîte:

from tkinter import * 
root = Tk() 

frame = Frame(root, width=500, height=500) 

text = Text(frame, width=10, height=2) # THESE TWO 
text.pack()       # LINES HERE 

frame.pack() 
root.mainloop() 

Pourquoi cela se produit, et comment puis-je l'empêcher de se produire?

Répondre

6

La trame par défaut a la "propagation du pack" activée. Cela signifie que le packer "calcule la taille d'un maître pour répondre exactement aux besoins de ses esclaves, et définit la largeur et la hauteur du maître à ces dimensions" (en citant les pages de manuel officielles de tcl/tk [1]).

Pour la grande majorité des cas, il s'agit du comportement exact. Pour les fois où vous ne le souhaitez pas, vous pouvez appeler le pack_propagate sur le maître et définir la valeur sur false. Je pense qu'en près de 20 ans de programmation, j'ai seulement besoin de faire cela une demi-douzaine de fois, si cela.

Vous avez également la possibilité d'utiliser wm_geometry pour définir la taille du premier niveau après avoir créé tous les widgets. Cela fait effectivement la même chose que si l'utilisateur avait manuellement redimensionné la fenêtre. Cela ne fonctionne que pour les fenêtres de niveau supérieur, vous ne pouvez pas utiliser wm_geometry sur un cadre.

+0

Merveilleux, merci beaucoup! – Kiwi

Questions connexes