使用 columnspan 时,如何使小部件占据与其主框架相同的宽度?

How to make a widget occupy the same width as that of its master frame when using columnspan?

给定以下网格布局配置:

通过代码生成:

from Tkinter import *

master = Tk()

frame1 = Frame(master, width=100, height=100, bg="red")
frame1.grid(sticky="nsew", columnspan=4)

frame2 = Frame(master, width=100, height=100, bg="blue")
frame2.grid()

frame3 = Frame(master, width=100, height=100, bg="green")
frame3.grid(row=1, column=1)

frame4 = Frame(master, width=100, height=100, bg="yellow")
frame4.grid(row=1, column=2)

frame4 = Frame(master, width=100, height=100, bg="purple")
frame4.grid(row=1, column=3)

master.mainloop()

我试图在 frame1 中插入一个 Entry,以便它使用以下代码扩展到整个 frame1 宽度:

e1 = Entry(frame1)
e1.grid(sticky="we", columnspan=4)

但是,我得到了以下结果:

如何使 Entry 小部件与 frame1 占用相同的宽度?

该条目在 frame1 内,因此它所在的网格与根 window 中的网格完全无关。

由于您没有告诉 tkinter 如何处理 frame1 中的额外 space,因此未使用它。如果你想让第0列的entry widget填满frame,你需要给它的列一个权重。

frame1.grid_columnconfigure(0, weight=1)

如果这是 frame1 中唯一的小部件,您可能需要考虑使用 pack,因为您可以在一行代码中完成所有操作:

e1.pack(side="top", fill="x", expand=True)