TL;博士:
文本小部件扩展得比 grid()
的指定列、行组合更远。称呼。唯一的解决方案来自更改 .width
和.height
属性为小东西并强制调用的粘性标志使用 'nsew'
扩展和填充.
背景:
文本小部件给我带来了一些困惑,例如以下内容:
root = Tk()
root.geometry('400x400')
root.grid_columnconfigure(0, weight = 1)
root.grid_columnconfigure(1, weight = 1)
root.grid_rowconfigure(0, weight = 1)
root.grid_rowconfigure(1, weight = 1)
b = Button(root)
b.grid(column = 0, row = 0, sticky = 'nsew')
t = Text(root)
t.grid(column = 1, row = 1, sticky = 'nsew')
鉴于此,我应该有一个 400x400 的窗口,例如:
+-------+-------+
| | |
| b | |
| | |
+-------+-------+
| | |
| | t |
| | |
+-------+-------+
但最终发生的情况是,文本小部件远远超出了右下列行:
+---+-----------+
| b | |
+---+ |
| | t |
| | |
| | |
| | |
+---+-----------+
解决此问题的唯一方法是更改文本小部件,如下所示:
t = Text(root, height = 1, width = 1)
然后粘性调用将小部件扩展为仅适合网格的列、行。然而,这似乎是我不必采取的额外步骤,即使文本小部件默认为 .width
和.height
像所有其他小部件一样。
问题: 为什么文本小部件会扩展到网格的指定列、行之外?
最佳答案
Question: Why does the Text widget expand beyond the specified column, row of a grid?
事实并非如此;相反,行和列会扩展以适合文本小部件。这并不是文本小部件所独有的。如果可能的话,Tkinter 将尝试进行安排,以便任何小部件都以其请求的大小显示。对于文本小部件,默认大小为 80 个字符 x 24 个字符,因此您的行和列会扩展以尝试适合该小部件。
如果您在第三列和第三行添加一些内容,就可以很容易地看出这一点。您会看到第二行非常高,第二列非常宽。即:行和列扩展以适合文本小部件,而不是文本小部件超出行和列的边缘。
将以下内容添加到示例代码中:
bottom_edge = Frame(root, background="red", height=4)
right_edge = Frame(root, background="red", width=4)
bottom_edge.grid(row=2, column=0, columnspan=3, sticky="ew")
right_edge.grid(row=0, column=2, rowspan=3, sticky="ns")
您必须调整窗口大小,因为您将窗口设置得太小而无法容纳所有内容。完成后,您将在右侧和下方看到红色边框,表明正在扩展的是行和列,而不是扩展到行和列之外的文本小部件。文本小部件位于第二行第二列的范围内。
关于python - tkinter.Text 小部件超出网格管理器限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50535182/