Tkinter grid布局窗口调整大小时控件无法按权重比例动态扩展如何解决
Tkinter Grid布局控件动态自适应调整方案
问题原因
grid的权重配置是层级生效的,你的代码存在两处配置缺失:
- 根窗口
root放置loginFrame的第0列未设置weight,窗口缩放时根容器的列不会分配多余空间,导致loginFrame本身尺寸不会变化 - 子控件的
sticky仅设置了对齐方向,没有设置水平填充属性,就算所在列宽度增加,控件本身也不会拉伸适配
修复方案
按以下步骤修改即可实现Username标签和输入框1:2比例的自适应调整:
- 给根窗口的第0列设置weight,保证父容器层可分配多余空间
loginFrame调用grid方法时指定sticky=tkinter.EW,让框架本身可填充父容器的列宽- 修改两个子控件的sticky参数为
tkinter.EW,让控件填充所在单元格的全部宽度
完整可运行代码
import tkinter root = tkinter.Tk() root.title("Main Window") root.geometry("100x50") # 给根窗口第0列设置权重,允许列扩展 root.columnconfigure(0, weight=1) loginFrame = tkinter.Frame(root, bg="red") userLabel = tkinter.Label(loginFrame, text="Username") userEntry = tkinter.Entry(loginFrame) # 子控件设置水平填充 userLabel.grid(column=0, row=0, sticky=tkinter.EW) userEntry.grid(column=1, row=0, sticky=tkinter.EW) loginFrame.columnconfigure(0, weight=1) loginFrame.columnconfigure(1, weight=2) # 框架本身设置水平填充 loginFrame.grid(sticky=tkinter.EW) root.mainloop()
补充说明:如果需要垂直方向也支持自适应,可同步给对应层级的行配置rowconfigure的weight属性,同时sticky参数增加垂直方向的N/S/NS配置即可。
内容的提问来源于stack exchange,提问作者david stephen
相关产品推荐
相关产品推荐

