2015-07-20 104 views
2

我在Windows 7中使用tkinter和Python 3.4。如果我使用grid(),爲什麼窗口大小調整時窗口小部件不能縮放?

我以非絕對方式定位(我沒有使用位置,我使用網格),因此,小部件應該縮放當我自動調整窗口大小時。然而,這並沒有發生,我也沒有把握這一點。這裏是我的代碼:

import tkinter as tk 

class App(tk.Frame): 

    def __init__(self, master=None): 
     tk.Frame.__init__(self, master) 
     self.config() 
     self.grid() 
     self.create_widgets() 

    def config(self): 
     self.master.title("Pykipedia Explorer") 

    def create_widgets(self): 
     self.search_label = tk.Label(self, text="Search: ") 
     self.search_label.grid(row=0, column=0, sticky=tk.N+tk.SW) 
     self.search_entry = tk.Entry(self) 
     self.search_entry.grid(row=0, column=0, padx=60, sticky=tk.N+tk.SW) 
     self.search_button = tk.Button(self, text="Explore!") 
     self.search_button.grid(row=0, column=0, padx=232, sticky=tk.SW) 
     self.content_area = tk.Text(self) 
     self.content_area.grid(row=1, column=0) 
     self.content_scroll_bar = tk.Scrollbar(self, command=self.content_area.yview) 
     self.content_scroll_bar.grid(row=1, column=1, sticky=tk.NW+tk.S+tk.W) 
     self.content_area["yscrollcommand"] = self.content_scroll_bar.set 
     self.quit_button = tk.Button(self, text="Quit", command=self.quit) 
     self.quit_button.grid(row=2, column=0, sticky=tk.SW) 

def main(): 

    app = App() 
    app.mainloop() 

    return 0 

if __name__ == '__main__': 
    main() 

爲什麼?

另外,I've tried to use grid_columnconfigure and grid_rowconfigure just like in this answer, and it fails miserably

+0

什麼給你的想法,調整窗口的大小應該由自動調整窗口小部件默認?如果您希望這樣做,則必須將窗口大小調整爲修改所有小部件的回調。 – TigerhawkT3

+0

您需要行/列配置,並粘貼到雙方,如:'label.grid(column = 0,row = 0,sticky ='NSEW')' –

回答

2

你的代碼中有幾個問題一起工作,以防止小部件縮放(我認爲你的意思是文本小部件)。

首先,您使用gridApp的實例放入根窗口。但是,您尚未設置sticky屬性,因此該應用不會增長和縮小。如果它不增長和縮小,它的內容也不會。另外,因爲你正在使用網格,所以你需要給行零和列零一個正的權重,這樣tkinter會爲它分配額外的空間。然而,由於這是在根窗口的唯一部件,你可以使用包,並通過與呼叫更換調用gridpack解決的問題:

self.pack(fill="both", expand=True) 

接下來,使用grid添加文本組件到畫布。您尚未使用sticky選項,因此即使分配給它的空間增加,小部件也將保持居中居中。您需要使用sticky屬性來告訴它「粘」到它被賦予了區域的四面八方:

self.content_area.grid(row=1, column=0, sticky="nsew") 

最後,你還沒有給任何列的任何「重量」,它講述的Tkinter如何分配額外的空間。當由grid管理的窗口調整大小時,將根據其權重爲​​行和列提供任何額外空間。默認情況下,行和列的權重爲零,因此它不會獲得任何額外的空間。

爲了讓文本區域成長爲窗口的增長,你需要給列零和行一個正權重:

self.grid_rowconfigure(1, weight=1) 
self.grid_columnconfigure(0, weight=1)