tkinter设置Button宽高后仍占满整个frame的问题如何解决?
问题原因
- 单位不匹配:Tkinter 中 Button 组件的
width、height参数默认单位为字符单位,而非像素单位。width=200代表宽度等于200个英文字符的宽度,实际渲染尺寸远大于常规预期,会直接撑满父容器。 - 容器拉伸配置:代码中对
f2的行列配置了weight=1,同时Canvas设置了sticky="nsew",Canvas会跟随父容器拉伸,进一步放大了按钮占满窗口的视觉效果。
解决方法
1. 调整按钮尺寸单位为像素
创建一个1x1的空像素占位图,给Button添加image参数触发像素单位计量,配置compound="center"保证后续添加文本可以正常显示:
# 在创建按钮前添加此行,生成空占位像素 pixel = tk.PhotoImage(width=1, height=1) # 按钮创建改为如下格式 b1 = tk.Button(f2_c2, relief='raised', image=pixel, width=200, height=200, compound="center") b2 = tk.Button(f2_c2, relief='raised', image=pixel, width=200, height=200, compound="center") b3 = tk.Button(f2_c2, relief='raised', image=pixel, width=200, height=200, compound="center")
2. 可选:固定Canvas尺寸不跟随窗口拉伸
如果不需要Canvas跟随窗口缩放,可以删除如下两行配置:
f2.grid_rowconfigure(0, weight=1) f2.grid_columnconfigure(0, weight=1)
内容的提问来源于stack exchange,提问作者Shidharth Routh
相关产品推荐
相关产品推荐

