2015-07-20 98 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)