1. 程式人生 > >使根視窗可伸縮(tkinter,Python3.x)

使根視窗可伸縮(tkinter,Python3.x)

使根視窗可伸縮

讓使用者可以放大縮小整個應用視窗,並將多餘的空間分配給內部的外掛。這需要一些操作。

為了讓應用的外掛可伸縮,需要用到行列尺寸管理的技術,詳細參見 設定行,列尺寸

對於 最小的應用 中的應用,它只包含了一個 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
  1. ‘’top level window‘’是螢幕中最外層的視窗。但是,這個視窗不是你應用的視窗。呼叫任何外掛的 .winfo_toplevel() 函式,可以達到 top-level 視窗。
  2. 這一行程式碼可以使,top level 視窗的第0行網格可伸縮。
  3. 這一行程式碼可以使,top level 視窗的第0列網格可伸縮。
  4. 這一行程式碼可以使,應用中第0行中外掛的網格可伸縮。
  5. 這一行程式碼可以使,應用中第0列種外掛的網格可伸縮。
  6. 通過設定引數 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 視窗的網格。

執行結果: