Tkinter使用grid布局实现底部居中放置多个并排分页按钮问题
问题根因
你当前的代码有两个核心错误导致效果不符合预期:
tk.Frame(master).grid(...)写法错误:grid()方法返回值为None,你拿到的fr并不是Frame实例,后续按钮相当于直接挂载到主窗口上,自然会受主窗口两列布局的限制。- 主窗口只有两列,给Frame设置
columnspan=4无效,需要设为columnspan=2让Frame跨主窗口的两列,才能占满底部整行宽度。
实现方案
Frame是独立的布局容器,内部布局逻辑和主窗口完全隔离,不需要改动上方原有列配置,就能实现按钮紧邻居中排列,推荐两种写法:
方案1:Frame内部用pack布局(更简单)
# 先创建Frame实例,再单独调用grid方法 fr = tk.Frame(master) # 跨主窗口2列占满底部整行,sticky=ew让Frame横向撑满整行 fr.grid(row=23, column=0, columnspan=2, sticky="ew") # 配置Frame列权重,保证内部控件可居中 fr.grid_columnconfigure(0, weight=1) # 按钮横向排列,padx可自定义按钮间距 tk.Button(fr, text='1', command=page1).pack(side="left", padx=4) tk.Button(fr, text='2', command=page2).pack(side="left", padx=4) tk.Button(fr, text='3', command=page3).pack(side="left", padx=4) tk.Button(fr, text='4', command=page4).pack(side="left", padx=4)
方案2:Frame内部用grid布局
fr = tk.Frame(master) fr.grid(row=23, column=0, columnspan=2, sticky="ew") # 给Frame内部4列设置相同权重,均分宽度 for i in range(4): fr.grid_columnconfigure(i, weight=1) tk.Button(fr, text='1', command=page1).grid(row=0, column=0, padx=4) tk.Button(fr, text='2', command=page2).grid(row=0, column=1, padx=4) tk.Button(fr, text='3', command=page3).grid(row=0, column=2, padx=4) tk.Button(fr, text='4', command=page4).grid(row=0, column=3, padx=4)
内容的提问来源于stack exchange,提问作者Simon-S
相关产品推荐
相关产品推荐

