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

如何用Tkinter实现窗口缩放时4个均分框架+底部框架布局?

解决方案:用Grid布局实现需求

直接用Grid布局就能完美解决你的问题,核心是给主窗口的行和列设置权重,同时让每个Frame填充所在的单元格。以下是完整代码:

import tkinter as tk

root = tk.Tk()
root.title("2×2 Grid + Bottom Frame")

# 配置主窗口网格:两行两列权重设为1,缩放时单元格均分空间
for row in range(2):
    root.grid_rowconfigure(row, weight=1)
for col in range(2):
    root.grid_columnconfigure(col, weight=1)

# 创建2×2网格的四个Frame
frame1 = tk.Frame(root, bg="red")
frame1.grid(row=0, column=0, sticky="nsew", padx=5, pady=5)  # sticky让Frame填充单元格

frame2 = tk.Frame(root, bg="blue")
frame2.grid(row=0, column=1, sticky="nsew", padx=5, pady=5)

frame3 = tk.Frame(root, bg="green")
frame3.grid(row=1, column=0, sticky="nsew", padx=5, pady=5)

frame4 = tk.Frame(root, bg="yellow")
frame4.grid(row=1, column=1, sticky="nsew", padx=5, pady=5)

# 创建底部Frame,横跨两列
bottom_frame = tk.Frame(root, bg="gray", height=50)  # 固定高度可按需调整
bottom_frame.grid(row=2, column=0, columnspan=2, sticky="ew", padx=5, pady=5)
# 若希望底部Frame也垂直扩展,给第2行加权重:root.grid_rowconfigure(2, weight=1),同时把sticky设为"nsew"

root.mainloop()

关键说明:

  • grid_rowconfigure/grid_columnconfigure的weight=1:告诉Tkinter窗口缩放时,这些行/列要分配额外空间,两行两列权重一致,四个单元格会均分所有扩展空间。
  • sticky="nsew":让Frame填充所在单元格的上下左右四个方向,确保Frame随单元格同步缩放。
  • columnspan=2:让底部Frame横跨两列,占据整个窗口宽度。
  • padx/pady是可选参数,用来给Frame之间添加间距,避免布局拥挤。

你之前用Grid布局出现位置异常,大概率是没设置行/列权重,或者没给Frame添加sticky="nsew",导致Frame无法随单元格缩放,看起来位置错位。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 19:22:42