2015-02-09 58 views
8

我得到了这个Text部件,我希望它使用网格几何管理器扩展并填充其整个父部件。展开文本部件以填充Tkinter中的整个父框架

根据我见过的例子,这个示例程序应该工作,但它不会,当扩展窗口时,内容不会调整大小。

from Tkinter import * 
root = Tk() 

input_text_area = Text(root) 
input_text_area.grid(row=1, column=0, columnspan=4, sticky=W+E) 
input_text_area.configure(background='#4D4D4D') 

root.mainloop() 

任何帮助表示赞赏

对于它的价值,我在Python 2.7(最新的2.x版)正在运行,并在PyCharm编码,但我不认为IDE相关。

+1

afaik你需要添加列权重或什么...我记得有这个问题一次。这个链接似乎相关http://userpages.umbc.edu/~dhood2/courses/cmsc433/spring2010/?section=Notes&topic=Python¬es=94 – 2015-02-09 21:34:31

回答

11

当使用网格时,父级中的任何额外空间与行和/或列的“权重”成比例地分配(即:权重为2的列获得的空间是在重量1)。默认情况下,行和列的权重为0(零),这意味着没有额外的空间给予它们。

您需要给出小部件处于非零权重的列,以便在窗口增长时将任何额外空间分配给该列。

root.grid_columnconfigure(0, weight=1) 

您还需要指定一个权重的行,并N+S+E+W粘性值,如果你想让它在各个方向生长。

5

因为你的窗口只包含一个小部件,你想这个小部件来填满整个窗口,这将是更容易使用的pack geometry manager代替grid

input_text_area.pack(expand=True, fill='both') 

expand=True告诉Tkinter的,允许小部件扩展到填充几何主体中的任何额外空间。 fill='both'使小部件能够水平和垂直展开。

+1

我的代码只是一个例子,我的布局有点复杂,我减少了问题到最小表达式,我真的不想使用包几何管理器,我发现它使用更少的琐碎用户界面更加可怕。 – 2015-02-09 22:00:27

0
from tkinter import * 
root = Tk() 

input_text_area = Text(root) 
input_text_area.grid(row=0, column=0, columnspan=4, sticky=N+S+W+E) 
input_text_area.configure(background='#4D4D4D') 
root.grid_columnconfigure(0, weight=1) 
root.grid_rowconfigure(0, weight=1) 

root.mainloop() 

不知道这是你想要的。 但这会填满整个屏幕。