如何让Tkinter中的Frame_1随窗口拉伸时贴合四角?
解决Tkinter窗口拉伸时LabelFrame无法贴合角落的问题
我刚接触Tkinter的时候也踩过类似布局的坑,咱们来一步步排查你的代码问题:
首先,你的核心需求是让labe1frame_1(顺带提一句,你拼写错啦,应该是labelFrame_1,把字母l写成数字1了)在窗口拉伸时贴合四个角落,目前代码里有几个关键的遗漏点:
问题分析
- 你给
window和labe1frame_1设置了rowconfigure和columnconfigure,但没有给tab1(也就是LabelFrame的父容器)做同样的配置,导致tab1不会随着tab_control的拉伸而扩展; ScrolledText控件没有设置sticky=NSEW,所以即使LabelFrame扩展了,文本框也不会填充整个LabelFrame的空间;- 虽然
tab_control设置了sticky=NSEW,但它的子元素tab1和tab2需要让父容器知道它们可以被拉伸。
修正后的代码
from tkinter import * from tkinter import scrolledtext from tkinter import ttk window = Tk() window.title("My Program") # 给窗口设置行列权重,确保窗口拉伸时内部元素能跟随扩展 window.rowconfigure(0, weight=1) window.columnconfigure(0, weight=1) tab_control = ttk.Notebook(window) tab_control.grid(row=0, column=0, sticky=NSEW) tab1 = ttk.Frame(tab_control) # 关键:给tab1设置行列权重,让它能跟随tab_control拉伸 tab1.rowconfigure(0, weight=1) tab1.columnconfigure(0, weight=1) tab1.grid(row=0, column=0, sticky=NSEW) # 这里也要加sticky=NSEW tab2 = ttk.Frame(tab_control) tab2.grid(row=0, column=0) tab_control.add(tab1, text='First') tab_control.add(tab2, text='Second') # 纠正拼写错误:labe1frame_1 → labelFrame_1 labelFrame_1 = LabelFrame(tab1, text="Frame_1") labelFrame_1.grid(row=0, column=0, padx=10, pady=10, sticky=NSEW) # 给LabelFrame设置行列权重 labelFrame_1.rowconfigure(0, weight=1) labelFrame_1.columnconfigure(0, weight=1) txtbox = scrolledtext.ScrolledText(labelFrame_1, width=40, height=10) # 关键:给ScrolledText设置sticky=NSEW,让它填充LabelFrame的空间 txtbox.grid(row=0, column=0, sticky=NSEW) window.mainloop()
关键修改点说明
- 给
tab1添加行列权重和sticky=NSEW:因为tab1是labelFrame_1的直接父容器,只有让tab1能随着tab_control拉伸,内部的LabelFrame才有扩展的空间; - 给
ScrolledText添加sticky=NSEW:这个属性会让控件向上下左右四个方向填充父容器的空间,否则文本框只会保持固定大小; - 纠正LabelFrame的拼写错误:虽然不影响功能,但规范的命名能避免后续维护时的混淆。
现在你再运行代码,拖拽窗口右下角拉伸时,Frame_1就会跟着窗口一起扩展,并且贴合四个角落啦~
内容的提问来源于stack exchange,提问作者user2565422
相关产品推荐
相关产品推荐

