如何在Tkinter中正确使用.grid()解决布局对齐问题
问题1解决方案(左侧4个Box垂直居中)
问题原因:left父容器高度大于4个Box的总高度时,grid默认会把多余的垂直空间全部堆在所有子组件下方,不会自动居中。
解决步骤:
- 给4个Box新增一个外层包裹Frame,方便整体控制居中,修改left区域代码:
# 新增包裹frame left_wrap = tk.Frame(master=left) left_wrap.grid(row=0, column=0) # 将原4个box的master参数从left改为left_wrap,行号保持0~3不变即可 box1_frame = tk.Frame(master=left_wrap) box1_frame.grid(row=0, column=0) # box2~box4同理修改master参数,行号对应改为1、2、3
- 给
left容器配置行列权重,让多余空间均匀分配,实现包裹Frame居中:
# 配置left的行列权重 left.grid_rowconfigure(0, weight=1) left.grid_columnconfigure(0, weight=1)
如果不想加包裹Frame,也可以直接给left的上下各配置一个权重为1的空行,把4个Box放在中间行,同样可以实现垂直居中效果。
问题2解决方案(中间两个按钮Frame上下堆叠)
你当前代码里两个frame的grid参数是row=0, column=0和row=0, column=1,行号相同列号不同,自然会左右并排,无法实现上下堆叠。
直接修改mid区域两个frame的grid参数即可:
button_frame = tk.Frame(master=mid) # 第一个frame放在第0行第0列 button_frame.grid(row=0, column=0, pady=20) # pady可按需调整上下间距 for r in range(3): for c in range(4): tk.Button(button_frame, text="Ironman", borderwidth=1).grid(row=r, column=c, padx=12, pady=4) some_frame = tk.Frame(master=mid) # 第二个frame放在第1行第0列,同列不同行就会自动上下堆叠 some_frame.grid(row=1, column=0) for r in range(3): for c in range(4): tk.Button(some_frame, text="Taco", borderwidth=1).grid(row=r, column=c, padx=12, pady=4)
修改后两个按钮组就会和左侧的Box一样实现上下排布效果。
内容的提问来源于stack exchange,提问作者impression7vx
相关产品推荐
相关产品推荐

