You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tkinter使用grid布局实现底部居中放置多个并排分页按钮问题

问题根因

你当前的代码有两个核心错误导致效果不符合预期:

  1. tk.Frame(master).grid(...) 写法错误:grid() 方法返回值为None,你拿到的fr并不是Frame实例,后续按钮相当于直接挂载到主窗口上,自然会受主窗口两列布局的限制。
  2. 主窗口只有两列,给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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 06:27:04