父框架展开时子框架未同步扩展的tkinter技术问题
Tkinter Grid布局子框架无法铺满父容器的解决方法
问题原因
使用grid布局时,仅给子元素添加sticky="nsew"属性不足以让其铺满父容器——默认情况下,grid的行和列权重为0,不会分配窗口拉伸时产生的额外空间,因此子元素只会保持自身最小尺寸。
解决步骤
需要给父容器的对应行和列设置权重,同时保留sticky="nsew"属性,具体修改如下:
- 为根窗口的第1列和第0行设置权重,确保右侧父框架
right_frame1能随窗口拉伸:
root.grid_columnconfigure(1, weight=1) root.grid_rowconfigure(0, weight=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
相关产品推荐
相关产品推荐

