2012-01-25 17 views
8

Le finestre di primo livello di Tkinter sembrano avere due "modalità": dove la dimensione viene determinata dall'applicazione e dove l'utente controlla la dimensione. Considerate questo codice:Cosa controlla il ridimensionamento automatico della finestra in Tkinter?

from tkinter import * 

class Test(Frame): 
    def __init__(self,parent): 
     Frame.__init__(self,parent) 
     self.b1 = Button(self, text="Button 1",command=self.b1Press) 
     self.b1.pack() 

    def b1Press(self): 
     print("b1Press") 
     label = Label(self, text="Label") 
     label.pack() 

root = Tk() 
ui = Test(root) 
ui.pack(fill='both', expand=1) 
root.mainloop() 

Ogni volta che si preme il pulsante, la dimensione visibile finestra cambia per adattarsi un'etichetta aggiuntiva. Tuttavia, se ridimensiono la finestra manualmente (con il mouse), interrompe il comportamento di ridimensionamento automatico e da quel momento in poi devo modificare manualmente la dimensione della finestra per visualizzare i nuovi pulsanti man mano che vengono aggiunti.

Che cosa determina se le dimensioni di una finestra di livello superiore sono sotto il controllo dell'applicazione o dell'utente?

Come può l'applicazione riguadagnare il dimensionamento automatico dopo che l'utente ha ridimensionato manualmente?

risposta

12

La regola è piuttosto semplice: una finestra di livello superiore ha una dimensione fissa ogni volta che è stata assegnata una dimensione fissa, altrimenti "si restringe per adattarsi".

Ci sono due modi per dare una dimensione fissa alla finestra di livello superiore: l'utente può ridimensionarla manualmente, oppure il codice dell'applicazione può chiamare wm_geometry per dargli una dimensione all'avvio.

Per ripristinare il comportamento originale, assegnare alla finestra una geometria nulla. Per esempio:

def __init__(self,parent): 
    ... 
    self.b2 = Button(self, text="Reset", command=self.b2Press) 
    self.b2.pack() 

def b2Press(self): 
    self.winfo_toplevel().wm_geometry("") 
+0

Grande - in realtà una risposta abbastanza semplice, ma quello che ho faticato a trovare. – timbod

Problemi correlati