2010-12-09 126 views
15

的Tkinter的窗口大小可以通過下面的方法來控制:如何設置框架的最小和最大高度或寬度?

.minsize() 
.maxsize() 
.resizable() 

是否有控制TKinter或者TTK幀的大小等同的方法呢?

@Bryan:我改變了你的frame1.pack代碼如下:

frame1.pack(fill='both', expand=True) 
frame1.bind('<Configure>', maxsize) 

我加入這個事件處理程序:

# attempt to prevent frame from growing past a certain size 
def maxsize(event=None): 
    print frame1.winfo_width() 
    if frame1.winfo_width() > 200: 
     print 'frame1 wider than 200 pixels' 
     frame1.pack_propagate(0) 
     frame1.config(width=200) 
     return 'break' 

上述事件處理程序檢測到幀的寬度太窄大,但無法防止發生的規模增加。這是Tkinter的侷限還是我誤解了你的解釋?

+1

我想你誤會了。我的解釋指出,如果您將展開設置爲False並將其設置爲無,則該框架將具有靜態寬度並且不會增長或縮小。如果幀由於其父級而改變了大小,則在幀上設置pack_propagate不起作用,您需要將其設置在父級上。 pack_propagate僅設置框架是根據其內容更改大小,而不是基於其父項。 – 2010-12-09 17:32:29

+0

@Bryan:謝謝你的跟進。我現在知道了。 – Malcolm 2010-12-10 22:06:09

回答

20

沒有單一的魔法功能強制幀的最小或固定大小。但是,通過給框架設置寬度和高度,您當然可以強制框架的大小。然後您必須做兩件事:當您將此窗口放入容器中時,您需要確保幾何管理器不縮小或擴大窗口。二,如果框架是其他小部件的容器,則關閉網格或打包傳播,以便框架不縮小或展開以適合其自己的內容。

但是,請注意,這不會阻止您將窗口大小調整爲小於內部框架。在這種情況下,框架將被裁剪。

import Tkinter as tk 

root = tk.Tk() 
frame1 = tk.Frame(root, width=100, height=100, background="bisque") 
frame2 = tk.Frame(root, width=50, height = 50, background="#b22222") 

frame1.pack(fill=None, expand=False) 
frame2.place(relx=.5, rely=.5, anchor="c") 

root.mainloop() 
相關問題