Tkinter网格布局问题:Clock应用中.grid方法不生效求助
Tkinter Grid布局问题解决
你的问题出在Frame的自动尺寸调整和Grid布局的权重配置上,以下是具体修复方案:
问题根源
- Frame默认会根据内部组件的大小自动调整自身尺寸,你设置的
height=50会被忽略,导致Frame被按钮撑大 - Grid布局未配置列权重,按钮不会自动填充Frame的可用空间
修复代码
from tkinter import * import time gui = Tk(className="Clock") gui.geometry("800x800") frame1 = Frame(gui, height=50, width=200, bg="lightgray") # 加背景色方便观察Frame范围 frame1.pack(fill="x") frame1.grid_propagate(False) # 禁用Frame自动调整尺寸,保持设置的height # 配置两列权重,让它们平分Frame的宽度 frame1.grid_columnconfigure(0, weight=1) frame1.grid_columnconfigure(1, weight=1) fuso_orario = Button(frame1, text="Fuso orario", height=2) fuso_orario.grid(row=0, column=0, sticky="nsew") # 让按钮填满所在单元格 sveglia = Button(frame1, text="Sveglia", height=2) sveglia.grid(row=0, column=1, sticky="nsew") gui.mainloop()
关键修改说明
grid_propagate(False):强制Frame保持你设置的尺寸,不会被内部组件撑开grid_columnconfigure(列索引, weight=1):给每列分配权重,当Frame有额外宽度时,两列会按比例平分空间sticky="nsew":让按钮在单元格内上下左右拉伸,完全填满单元格空间
如果你之前尝试把Frame改成Grid布局,只需要给主窗口的对应列配置权重,再重复上述Frame内部的配置即可。
内容的提问来源于stack exchange,提问作者Tino
相关产品推荐
相关产品推荐

