我在Windows 7中使用tkinter和Python 3.4。
我以非绝对的方式定位(我没有使用地方,我正在使用网格),因此,当我自动调整窗口大小时,小部件应该缩放。然而,这不会发生,我没有理解这一点。这是我的代码:
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()
为什么?
答案 0 :(得分:3)
您的代码中有几个问题正在协同工作以防止小部件扩展(以及“小部件”,我认为您的意思是文本小部件)。
首先,您使用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如何分配额外的空间。当grid
管理的窗口调整大小时,任何额外的空间将根据其权重给予行和列。默认情况下,行和列的权重为零,因此不会获得任何额外的空间。
要使文本区域随着窗口的增长而增长,您需要将列0和第1行赋予正权重:
self.grid_rowconfigure(1, weight=1)
self.grid_columnconfigure(0, weight=1)