展开文本小部件以填充 Tkinter 中的整个父框架

Posted

技术标签:

【中文标题】展开文本小部件以填充 Tkinter 中的整个父框架【英文标题】:Expand Text widget to fill the entire parent Frame in Tkinter 【发布时间】:2015-04-09 18:46:39 【问题描述】:

我得到了这个 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 不相关。

【问题讨论】:

@JoranBeasley - URL 现在指向 http 404。 【参考方案1】:

使用网格时,父级中的任何额外空间都按行和/或列的“权重”分配(即:权重为 2 的列获得的空间是具有1) 的重量。默认情况下,行和列的权重为 0(零),这意味着不会给它们额外的空间。

您需要为小部件的列赋予非零权重,以便窗口增长时的任何额外空间都分配给该列。

root.grid_columnconfigure(0, weight=1)

您还需要为该行指定一个权重,如果您希望它向各个方向增长,您还需要指定一个粘性值N+S+E+W

【讨论】:

【参考方案2】:

由于您的窗口仅包含一个小部件并且您希望此小部件填满整个窗口,因此使用pack geometry manager 而不是grid 会更容易

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

expand=True 告诉 Tkinter 允许小部件扩展以填充几何母版中的任何额外空间。 fill='both' 使小部件可以水平和垂直扩展。

【讨论】:

我的代码只是一个例子,我的布局有点复杂,我把问题简化到最小的表达式,我真的不想用包几何管理器,我发现它更用于不那么琐碎的 UI 非常糟糕。【参考方案3】:
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()

不确定这是否是您想要的。 但这会填满整个屏幕。

【讨论】:

以上是关于展开文本小部件以填充 Tkinter 中的整个父框架的主要内容,如果未能解决你的问题,请参考以下文章

如何在python 3.4.x中的tkinter文本小部件中显示渲染的html内容

tkinter Entry 小部件中的可见文本变量

Tkinter Label小部件中的下划线文本?

更改 tkinter 文本小部件中的默认输入语言

仅在一侧向 tkinter 小部件添加填充

如何更改标签小部件中的文本大小,python tkinter [重复]