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

时间:2018-01-26 17:31:56

标签: python tkinter tkinter-entry tkinter-layout

给出以下网格布局配置:

enter image description here

它是通过代码生成的:

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

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

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

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

enter image description here

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

1 个答案:

答案 0 :(得分:2)

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

由于您没有告诉tkinter如何处理frame1内的额外空间,因此未使用它。如果您希望第0列中的条目小部件填充框架,则需要为其列赋予权重。

frame1.grid_columnconfigure(0, weight=1)

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

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