2012-01-25 81 views
8

Tkinter頂級窗口似乎有兩個「模式」:大小由應用程序決定,以及用戶控制大小的位置。考慮以下代碼:什麼控制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() 

每次我按下按鈕,可視窗口的尺寸改變以適應額外的標籤。但是,如果我手動(使用鼠標)調整窗口大小,則會停止此自動調整大小的行爲,從那時起,我必須手動更改窗口的大小以在添加新窗口時查看新按鈕。

什麼決定頂層窗口的大小是否受應用程序或用戶的控制?

應用程序如何在用戶手動調整大小後重新獲得自動調整大小?

回答

12

規則很簡單 - 只要給定了固定大小,頂層窗口就會有一個固定的大小,否則就會「縮小到適合」。

有兩種方法可以給頂層窗口一個固定的大小:用戶可以手動調整大小,或者您的應用程序代碼可以調用wm_geometry在啓動時給它一個大小。

要重置原始行爲,請爲窗口指定一個空幾何。例如:

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

太棒了 - 確實是一個足夠簡單的答案,但我一直在努力尋找答案。 – timbod

相關問題