2010-10-01 12 views
6

Con questo codice, la finestra è di 500 per 500, che è quello che ho intenzione di:Perché il frame Tkinter viene ridimensionato quando viene aggiunta una casella di testo?

from tkinter import * 
root = Tk() 

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

frame.pack() 
root.mainloop() 

Quando aggiungo una casella di testo al telaio, però, si restringe al solo la dimensione del testo casella:

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

Perché ciò accade e come posso evitare che ciò accada?

risposta

6

Il frame di default ha "propagazione del pacchetto" attivato. Ciò significa che il packer "calcola quanto deve essere grande un master per soddisfare esattamente le esigenze dei suoi schiavi, e imposta la larghezza e l'altezza richieste del master a queste dimensioni" (citando dalle pagine man tcl/tk ufficiali [1]).

Per la stragrande maggioranza dei casi questo è l'esatto comportamento corretto. Per le volte che non lo desideri, puoi chiamare pack_propagate sul master e impostare il valore su false. Penso che in quasi 20 anni di programmazione tk ho avuto solo bisogno di farlo una mezza dozzina di volte, se questo.

Un'altra scelta che devi fare è usare wm_geometry per impostare la dimensione del toplevel dopo aver creato tutti i widget. Questo fa effettivamente la stessa cosa come se l'utente avesse ridimensionato manualmente la finestra. Tuttavia, funziona solo con le finestre di livello superiore, non è possibile utilizzare wm_geometry su un frame.

+0

Meraviglioso, grazie mille! – Kiwi

Problemi correlati