2012-01-25 13 views
8

Okna najwyższego poziomu w systemie Tkinter mają dwa "tryby": rozmiar jest określany przez aplikację i gdzie użytkownik kontroluje rozmiar. Rozważ ten kod:Co kontroluje automatyczne skalowanie okna w 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() 

Po każdym naciśnięciu przycisku widoczne okno zmienia rozmiar, aby zmieściło się w dodatkowej etykiecie. Jeśli jednak ręcznie zmieniam rozmiar okna (za pomocą myszy), to zatrzymuje to automatyczne zmienianie rozmiaru i od tej pory muszę ręcznie zmienić rozmiar okna, aby wyświetlić nowe przyciski podczas ich dodawania.

Co decyduje o tym, czy rozmiar okna głównego jest pod kontrolą aplikacji czy użytkownika?

W jaki sposób aplikacja może odzyskać automatyczne rozmiary po zmianie rozmiaru ręcznie?

Odpowiedz

12

Zasada jest dość prosta - okno z pojedynczym monitorem ma ustalony rozmiar, gdy ma ustalony rozmiar, w przeciwnym razie "kurczy się dopasować".

Istnieją dwa sposoby nadania oknie najwyższego poziomu stałego rozmiaru: użytkownik może zmienić rozmiar ręcznie, lub kod aplikacji może zadzwonić pod numer wm_geometry, aby nadać mu rozmiar podczas uruchamiania.

Aby zresetować oryginalne zachowanie, nadaj mu pustą geometrię. Na przykład:

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

Świetna - tak naprawdę prosta odpowiedź, którą starałam się znaleźć. – timbod