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

父框架展开时子框架未同步扩展的tkinter技术问题

Tkinter Grid布局子框架无法铺满父容器的解决方法

问题原因

使用grid布局时,仅给子元素添加sticky="nsew"属性不足以让其铺满父容器——默认情况下,grid的行和列权重为0,不会分配窗口拉伸时产生的额外空间,因此子元素只会保持自身最小尺寸。

解决步骤

需要给父容器的对应行和列设置权重,同时保留sticky="nsew"属性,具体修改如下:

  1. 为根窗口的第1列和第0行设置权重,确保右侧父框架right_frame1能随窗口拉伸:
root.grid_columnconfigure(1, weight=1)
root.grid_rowconfigure(0, weight=1)
  1. 为right_frame1的第0行和第0列设置权重,让子框架right_frame_2能铺满整个父框架:
right_frame1.grid_rowconfigure(0, weight=1)
right_frame1.grid_columnconfigure(0, weight=1)

修改后完整代码

import tkinter as tk
import tkinter.ttk as ttk

root = tk.Tk()

# 配置根窗口的行列权重,确保right_frame1能随窗口拉伸
root.grid_columnconfigure(1, weight=1)
root.grid_rowconfigure(0, weight=1)

left_frame_1 = tk.Frame(root, background="#ff0000")
left_frame_1.grid(row=0, column=0)

left_frame_2 = tk.Frame(left_frame_1)
left_frame_2.grid(row=0, column=0)

left_label_1 = tk.Label(left_frame_2, text="HELLO")
left_label_2 = tk.Label(left_frame_2, text="WORLD")
left_label_3 = tk.Label(left_frame_2, text="=D")

left_label_1.grid(row=0, column=0)
left_label_2.grid(row=1, column=0)
left_label_3.grid(row=2, column=0)

right_frame1 = tk.Frame(root, background="#00ff00")
right_frame1.grid(row=0, column=1, sticky="nsew")

# 配置right_frame1的行列权重,让子框架铺满
right_frame1.grid_rowconfigure(0, weight=1)
right_frame1.grid_columnconfigure(0, weight=1)

right_frame_2 = tk.Frame(right_frame1, background="#0000ff")
right_frame_2.grid(row=0, column=0, sticky="nsew")

right_label_1 = tk.Label(right_frame_2, text="CENTER ME!")
right_label_1.grid(row=0, column=0, sticky="nsew")

root.mainloop()

补充说明

  • weight=1表示该行列会优先分配所有额外空间(若多个行列设置权重,将按权重比例分配)。
  • 同时设置sticky="nsew"和行列权重,才能让子元素完全贴合父容器的四边,实现完全覆盖的效果。

内容的提问来源于stack exchange,提问作者The Love Ice Creams Cat

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 20:20:23