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

Tkinter技术问题:如何让两个并排按钮随窗口宽度自适应?

实现左右平分宽度且高度固定的按钮布局

要实现两个按钮平分窗口宽度、高度固定且随窗口宽度自适应的效果,核心是利用Tkinter布局管理器的权重分配和填充属性,以下是两种可行方案:

方法一:使用pack()布局

这种方式代码简洁,适合简单的左右分布场景:

import tkinter as tk

root = tk.Tk()
root.geometry("400x200")

# 红色容器Frame,随窗口水平拉伸
button_frame = tk.Frame(root, bg="red")
button_frame.pack(fill="x", expand=True, padx=5, pady=5)

# 左按钮:高度固定为3,平分水平空间
btn_left = tk.Button(button_frame, text="左按钮", height=3)
btn_left.pack(side="left", fill="x", expand=True, padx=2, pady=2)

# 右按钮:高度固定为3,平分水平空间
btn_right = tk.Button(button_frame, text="右按钮", height=3)
btn_right.pack(side="left", fill="x", expand=True, padx=2, pady=2)

root.mainloop()
  • fill="x"让Frame和按钮沿水平方向填充可用空间
  • expand=True使按钮平分Frame内的水平剩余空间
  • height=3固定按钮高度(基于文本行数,可根据需求调整)

方法二:使用grid()布局(解决你之前未实现的问题)

之前用grid()失败,通常是因为未给列设置权重,导致窗口拉伸时列宽不变化:

import tkinter as tk

root = tk.Tk()
root.geometry("400x200")

button_frame = tk.Frame(root, bg="red")
button_frame.pack(fill="x", expand=True, padx=5, pady=5)

# 给两列设置相同权重,确保窗口拉伸时平分宽度
button_frame.grid_columnconfigure(0, weight=1)
button_frame.grid_columnconfigure(1, weight=1)

# 按钮高度固定,sticky="ew"让按钮填充单元格水平方向
btn_left = tk.Button(button_frame, text="左按钮", height=3)
btn_left.grid(row=0, column=0, sticky="ew", padx=2, pady=2)

btn_right = tk.Button(button_frame, text="右按钮", height=3)
btn_right.grid(row=0, column=1, sticky="ew", padx=2, pady=2)

root.mainloop()
  • grid_columnconfigure的weight=1表示列会按比例分配额外空间,两列权重相同则平分宽度
  • sticky="ew"让按钮在单元格内左右拉伸,填满列宽
  • height参数保持按钮高度恒定

补充说明

如果需要更精确的像素级高度控制,可以结合tkinter.font调整按钮字体,或者通过place()手动计算宽度,但place()需要绑定窗口大小变化事件动态更新,不如前两种布局管理器灵活,一般不推荐。

内容的提问来源于stack exchange,提问作者Laura Bieber

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 22:25:20