使根窗口可伸縮
讓用戶可以放大縮小整個應用窗口,並將多餘的空間分配給內部的插件。這需要一些操作。
爲了讓應用的插件可伸縮,需要用到行列尺寸管理的技術,詳細參見 設置行,列尺寸 。
對於 最小的應用 中的應用,它只包含了一個 Quit 插件,如果運行這個應用,調整窗口的大小,按鈕不會改變大小,一直保持在窗口的中央。
使用以下代碼代替 最小的應用 中的 .createWidgets()
方法。這樣, Quit 按鈕就會始終填充整個窗口。
def createWidgets(self):
top=self.winfo_toplevel()#1
top.rowconfigure(0, weight=1)#2
top.columnconfigure(0, weight=1)#3
self.rowconfigure(0, weight=1)#4
self.columnconfigure(0, weight=1)#5
self.quit = Button(self, text='Quit', command=self.quit)
self.quit.grid(row=0, column=0,
sticky=tk.N+tk.S+tk.E+tk.W)#6
- ‘’top level window‘’是屏幕中最外層的窗口。但是,這個窗口不是你應用的窗口。調用任何插件的
.winfo_toplevel()
函數,可以達到 top-level 窗口。 - 這一行代碼可以使,top level 窗口的第0行網格可伸縮。
- 這一行代碼可以使,top level 窗口的第0列網格可伸縮。
- 這一行代碼可以使,應用中第0行中插件的網格可伸縮。
- 這一行代碼可以使,應用中第0列種插件的網格可伸縮。
- 通過設置參數
sticky=tk.N+tk.S+tk.E+tk.W
允許按鈕通過伸縮來填充網格中的 cell 。
還需要改變一個地方。在構造函數 __init__()
中,將第二行改爲一下內容:
def __init__(self, master=None):
tk.Frame.__init__(self, master)
self.grid(sticky=tk.N+tk.S+tk.E+tk.W)
self.createWidgets()
必須設置 self.grid()
函數中的 sticky=tk.N+tk.S+tk.E+tk.W
,這樣纔會伸縮應用中的插件,填充 top-level 窗口的網格。
運行結果:
注:本文翻譯自新墨西哥理工大學計算機中心