Tkinter使用pack嵌套Frame布局效果不符合预期如何解决
问题原因
布局不符合预期由两个核心问题导致:
- Tkinter的
Frame组件默认开启几何传播特性,父容器会自动调整尺寸到刚好包裹内部子组件,你手动给column1、column2设置的height、width参数会被覆盖,无法生效。 - 代码仅将第一列的第一个蓝色块
col_1_row_1加入了布局,剩余三个蓝色块没有调用pack()方法渲染;第二列容器也未做固定尺寸设置,无法保持设定的高度。
修正方案
- 对需要固定尺寸的
column1、column2调用pack_propagate(False),关闭自动尺寸适配,让手动设置的宽高生效。 - 补全第一列剩余三个蓝色块的
pack()调用,让四个蓝色块按垂直方向排列。 - 移除代码中未使用的
pandas导入,精简冗余内容。
修正后可运行代码
import tkinter as tk if __name__ == '__main__': top = tk.Tk() top.configure(bg='gray') top.geometry("700x350") table = tk.Frame(top, bg="black") column1 = tk.Frame(table, height=400, width=100, bg="pink", borderwidth=2) column2 = tk.Frame(table, height=400, width=100, bg="yellow", borderwidth=2) col_1_row_1 = tk.Frame(column1, height=100, width=100, bg="blue", borderwidth=2) col_1_row_2 = tk.Frame(column1, height=100, width=100, bg="blue", borderwidth=2) col_1_row_3 = tk.Frame(column1, height=100, width=100, bg="blue", borderwidth=2) col_1_row_4 = tk.Frame(column1, height=100, width=100, bg="blue", borderwidth=2) # 关闭列容器的自动尺寸适配,让固定宽高生效 column1.pack_propagate(False) column2.pack_propagate(False) table.pack(side=tk.TOP) column1.pack(side=tk.LEFT) column2.pack(side=tk.LEFT) # 第一列所有蓝色块按垂直方向排列 col_1_row_1.pack(side=tk.TOP) col_1_row_2.pack(side=tk.TOP) col_1_row_3.pack(side=tk.TOP) col_1_row_4.pack(side=tk.TOP) top.mainloop()
补充说明
如果后续不需要固定列宽高,想让容器自动适配内部内容,删掉pack_propagate(False)两行即可。如果需要让第二列黄色区域自动拉伸占满窗口剩余垂直高度,可以给column2.pack()添加参数fill=tk.Y。
内容的提问来源于stack exchange,提问作者michael
相关产品推荐
相关产品推荐

