在Tkinter中,如何将Text小部件扩展至填充整个父Frame?

22

我有一个Text小部件,希望它可以使用Grid布局管理器扩展并填充整个父容器。

根据我看到的例子,这个示例程序应该可以工作,但不幸的是,当调整窗口大小时,内容不会重新调整大小。

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
@JoranBeasley - 现在的URL指向http 404。 - Tomasz Gandor
3个回答

29
当使用网格布局时,父元素中的额外空间会按行和/或列的“权重”比例分配(例如,具有2个权重的列获得与1个权重的列相比两倍的空间)。默认情况下,行和列的权重为0(零),意味着它们不会占用额外的空间。
您需要为部件所在的列提供一个非零权重,以便在窗口增大时将任何额外的空间分配给该列。
root.grid_columnconfigure(0, weight=1)

如果您想让行在所有方向上都扩展,还需要指定行的权重和粘附值为N+S+E+W


20

由于您的窗口只包含一个小部件,并且您希望该小部件填充整个窗口,使用pack布局管理器grid更容易。

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

expand=True 告诉 Tkinter 允许该小部件扩展以填充几何图形的空余空间。 fill='both' 使小部件在水平和垂直方向上都可以扩展。


6
我的代码只是一个例子,我的布局有点更加复杂,我将这个问题简化到了最小的表达形式,我不想真的使用pack布局管理器,我发现它甚至更加糟糕,用于不太复杂的用户界面。 - SoManyGoblins

8
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()

不确定这是否符合你的要求。但是这会填满整个屏幕。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接