2012-01-28 108 views
1

下面是代碼:窗口太小

from Tkinter import * 

def main(): 
    w1 = Tk() 
    w1["height"] = 400; 
    w1["width"] = 500; 
    w1.title("Gui") 
    f1 = Frame(w1) 
    f1.grid_propagate() 
    f1["height"] = w1["height"]; 
    f1["width"] = w1["width"]; 
    f1.pack() 
    p1 = Button(f1) 
    p1["borderwidth"] = 6 
    p1["text"] = "esci" 
    p1["background"] = "red" 
    p1["command"] = f1.quit 
    p1.pack() 
    w1.mainloop() 
main() 

我已經給w1f1(窗口和框架)一個500x400大小,但似乎過於小窗口:這是太小了,我要說的黑白200x100,但我不知道......爲什麼會發生這種情況?

回答

1

正是這種小的,因爲Tkinter的窗口在默認情況下「縮小以適合」。這就是所謂的幾何傳播,看起來你可能已經熟悉它了,因爲你調用了grid_propagate--儘管它沒有實際做任何事情,也沒有使用它返回的東西。

您的代碼中實際存在兩個問題。首先是您撥打f1.grid_propagate(),但您使用pack來安排小部件在f1,因此您需要撥打f1.pack_propagate來代替。其次,你需要傳遞一個False的標誌來實際關閉傳播。這樣做會阻止f1縮小以適應其內容。

其次,你是不是在w1轉向傳播了,所以它會縮小以適合其子。您需要致電w1.grid_propagate(False),或者您可以致電w1.wm_geometry("500x400")請求窗口管理器將尺寸設置爲該確切尺寸。

如果您只是在學習Tkinter,我建議您抵制關閉傳播的衝動。在我幾十年的tk編碼中,我每隔幾年就會使用一次該功能。 Tkinter的幾何管理器是非凡的工具,您應該學會利用它們。而不是讓容器控制它們的大小,讓孩子們成爲你想要的大小,GUI的其餘部分將工作得很好。

1

您需要使用

f1.pack_propagate(0) 

,使其不收縮