2010-10-01 13 views
6

Con este código, la ventana es de 500 por 500, que es lo que voy para:¿Por qué cambia el tamaño del marco de Tkinter cuando se agrega un cuadro de texto?

from tkinter import * 
root = Tk() 

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

frame.pack() 
root.mainloop() 

Al agregar un cuadro de texto al marco, sin embargo, que se reduce a sólo el tamaño del texto caja:

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() 

¿Por qué sucede esto, y cómo puedo evitar que ocurra?

Respuesta

6

El cuadro por defecto tiene "propagación de paquetes" activada. Eso significa que el empacador "calcula qué tan grande debe ser un maestro para satisfacer exactamente las necesidades de sus esclavos, y establece el ancho y la altura solicitados del maestro a estas dimensiones" (citando las páginas man oficiales tcl/tk [1])

En la gran mayoría de los casos, este es el comportamiento correcto. Para los momentos que no desee esto, puede llamar al pack_propagate en el maestro y establecer el valor en falso. Creo que en cerca de 20 años de programación en tk solo he necesitado hacer esto media docena de veces, si es así.

Otra opción que tiene es usar wm_geometry para establecer el tamaño de toplevel después de haber creado todos los widgets. Esto efectivamente hace lo mismo que si el usuario hubiera redimensionado manualmente la ventana. Sin embargo, esto solo funciona para las ventanas de nivel superior, no puede usar wm_geometry en un marco.

+0

¡Maravilloso, muchas gracias! – Kiwi

Cuestiones relacionadas