如何使用Tkinter grid布局将组件放置在容器指定列位置
问题分析
你原有代码无法实现预期效果的核心原因有两个:
- 你调用
clientFrame.grid(columnspan= 12)的作用是让clientFrame在其父容器(root)的grid布局中跨12列,并不会让clientFrame自身的grid布局生成12个等宽列 - grid布局默认没有内容的列宽度为0,所以你将按钮放在column=3、column=5的位置时,前面的空列不会占据空间,按钮会挤在最左侧
解决方案
调整思路如下:
- 为
clientFrame的12列统一配置布局规则,使用grid_columnconfigure方法给每列设置weight=1以及相同的uniform参数,保证所有列等宽,空列也会占据对应宽度 - 调整
clientFrame的布局方式,让它撑满父容器的宽度,避免列宽被压缩 - 注意grid的列号从0开始计数,如果你需要的是视觉上从左数的第3列,对应
column参数值为2,可根据实际需求自行调整
修改后完整代码
import tkinter root = tkinter.Tk() root.geometry("1280x720") clientFrame = tkinter.Frame(root) # 配置clientFrame的12列为等宽 for col in range(12): clientFrame.grid_columnconfigure(col, weight=1, uniform="equal_col") signupBtn = tkinter.Button(clientFrame, text= "Signup") # 列号从0开始,此处3对应第4列,要放在视觉第3列可改为2 signupBtn.grid(column= 3, row= 0) loginBtn = tkinter.Button(clientFrame, text= "Login") # 列号从0开始,此处5对应第6列,要放在视觉第5列可改为4 loginBtn.grid(column= 5, row=0) # 让clientFrame撑满root的宽度,可自行调整padx、pady的边距参数 clientFrame.pack(fill=tkinter.X, padx=50, pady=20) root.mainloop()
内容的提问来源于stack exchange,提问作者david stephen
相关产品推荐
相关产品推荐

