Python 如果我';我在使用grid(),为什么小部件不';调整窗口大小时是否缩放?

Python 如果我';我在使用grid(),为什么小部件不';调整窗口大小时是否缩放?,python,tkinter,resize,Python,Tkinter,Resize,我在Windows7中将tkinter与Python3.4结合使用 我以一种非绝对的方式进行定位(我没有使用place,我使用的是grid),因此,当我自动调整窗口大小时,小部件应该可以缩放。然而,这并没有发生,我没有抓住要点。这是我的密码: import tkinter as tk class App(tk.Frame): def __init__(self, master=None): tk.Frame.__init__(self, master)

我在Windows7中将tkinter与Python3.4结合使用

我以一种非绝对的方式进行定位(我没有使用place,我使用的是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()
为什么


另外,.

您的代码中存在几个问题,这些问题一起工作以防止小部件扩展(我假设您所说的“小部件”是指文本小部件)

首先,使用
grid
App
的实例放在根窗口中。但是,您没有设置
sticky
属性,因此应用程序不会增长和收缩。如果它不生长和收缩,它的内容物也不会生长和收缩

另外,因为您使用的是网格,所以需要为第0行和第0列赋予正权重,以便tkinter为其分配额外的空间。但是,由于这是根窗口中唯一的小部件,您可以使用pack并通过将对
grid
的调用替换为对
pack
的调用来解决问题:

self.pack(fill="both", expand=True)
接下来,使用
grid
将文本小部件添加到画布。您没有使用
sticky
选项,因此即使分配给它的空间增加,小部件也将保持在空间的中心。您需要使用
sticky
属性告诉它“粘住”给定区域的所有边:

self.content_area.grid(row=1, column=0, sticky="nsew")
最后,您没有给任何列指定任何“权重”,这告诉tkinter如何分配额外的空间。当网格管理的窗口调整大小时,根据行和列的权重为它们提供额外的空间。默认情况下,行和列的权重为零,因此不会获得任何额外空间

要使文本区域随着窗口的增长而增长,需要为第0列和第1行赋予正权重:

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

是什么让你产生了这样的想法:在默认情况下,调整窗口大小会自动调整小部件的大小?如果您想让它这样做,您必须将窗口大小调整绑定到一个修改所有小部件的回调。您需要行/列配置和两侧粘贴,如:
label.grid(column=0,row=0,sticky='NSEW')