如何实现Tkinter框架及内容随主窗口缩放,顶部按钮固定位置?
解决Tkinter窗口缩放时框架与文本框自适应问题
嘿,我来帮你搞定这个窗口缩放的问题!你已经找对思路了,columnconfigure和rowconfigure就是实现控件自适应窗口大小的核心工具,我来一步步给你说明怎么修改代码:
关键思路
要实现你的需求,我们需要分两层配置:主窗口的行列布局,以及框架内部的行列布局,让需要缩放的部分获得"可扩展"的权重,而顶部按钮所在的区域保持固定比例。
修改步骤
配置主窗口的行列
主窗口中,顶部按钮在第1行,框架在第2行。我们需要让第2行(框架所在行)和按钮/框架覆盖的1-3列拥有扩展权重:- 给主窗口的
row=2设置weight=1,让框架所在行随窗口高度自动缩放 - 给主窗口的
column=1、column=2、column=3都设置weight=1,让这三列随窗口宽度自动分配空间
- 给主窗口的
配置框架内部的行列
框架里的文本框需要填满整个框架,所以要给框架的row=1和column=1设置weight=1,让文本框能跟随框架的大小变化而完全撑开。
修改后的完整代码
from tkinter import * from tkinter import scrolledtext master_window = Tk() # 配置主窗口行列:让框架所在区域可缩放,按钮区域保持固定 master_window.rowconfigure(2, weight=1) master_window.columnconfigure(1, weight=1) master_window.columnconfigure(2, weight=1) master_window.columnconfigure(3, weight=1) # 创建顶部按钮(固定位置,随列宽自适应但不改变行高) btn_Image = Button(master_window, text='Image') btn_Image.grid(row=1, column=1, padx=(10), pady=10, sticky=E + W) btn_File = Button(master_window, text='File') btn_File.grid(row=1, column=2, padx=(10), pady=10, sticky=E + W) btn_Folder = Button(master_window, text='Folder') btn_Folder.grid(row=1, column=3, padx=(10), pady=10, sticky=E + W) # 创建带文本框的框架 group1 = LabelFrame(master_window, text="Text Box", padx=5, pady=5) group1.grid(row=2, column=1, columnspan=3, padx=10, pady=10, sticky=E+W+N+S) # 配置框架内部行列:让文本框填满整个框架 group1.rowconfigure(1, weight=1) group1.columnconfigure(1, weight=1) # 创建可缩放的滚动文本框 txtbox = scrolledtext.ScrolledText(group1, width=40, height=10) txtbox.grid(row=1, column=1, columnspan=3, sticky=E+W+N+S) mainloop()
小细节说明
weight=1表示当窗口有额外空间时,该行列会按权重比例分配空间(这里都设为1就是平均分配)sticky=E+W+N+S让控件完全填满所在的单元格,不管单元格怎么扩展,控件都会跟着撑满对应区域
内容的提问来源于stack exchange,提问作者user2565422
相关产品推荐
相关产品推荐

