如何让Panedwindow窗格内的组件随窗格调整自动拉伸?
Tkinter Panedwindow中Combobox无法随Labelframe自适应宽度的解决方法
问题出在你没有给承载组件的Labelframe设置列权重配置,反而错误地给Entry、Combobox这类子控件调用了grid_columnconfigure——这类控件本身不是容器,该调用不会生效。
要让Combobox随Labelframe宽度自适应,只需要给两个Labelframe添加列权重配置,让它们内部的列能占满可用宽度,再配合控件的sticky="ew"属性即可。
修正后的完整代码:
import tkinter as tk from tkinter import ttk root = tk.Tk() root.geometry("500x200") mainframe = ttk.Frame(root) pw = ttk.Panedwindow(mainframe, orient=tk.HORIZONTAL) lf1 = ttk.Labelframe(pw) lf2 = ttk.Labelframe(pw) pw.add(lf1) pw.add(lf2) entry = ttk.Entry(lf1) entry2 = ttk.Entry(lf1) select = ttk.Combobox(lf2, values=("VAL1", "VAL2")) mainframe.grid(sticky="nsew") pw.grid(sticky="nsew") entry.grid(sticky="ew") entry2.grid(sticky="ew") select.grid(sticky="ew") root.grid_rowconfigure(0, weight=1) root.grid_columnconfigure(0, weight=1) mainframe.grid_rowconfigure(0, weight=1) mainframe.grid_columnconfigure(0, weight=1) pw.grid_rowconfigure(0, weight=1) pw.grid_columnconfigure(0, weight=1) # 关键修改:给两个Labelframe设置列权重,让内部列占满宽度 lf1.grid_columnconfigure(0, weight=1) lf2.grid_columnconfigure(0, weight=1) root.mainloop()
关键说明
lf1.grid_columnconfigure(0, weight=1)和lf2.grid_columnconfigure(0, weight=1)告诉Labelframe:当自身宽度变化时,第0列要分配所有可用的额外空间,这样列内的Entry和Combobox就能通过sticky="ew"拉伸填满整个列。- 原代码中给Entry、Combobox调用
grid_columnconfigure是无效的,因为这些控件不是容器,没有子列可以配置,因此可以直接删除这些无效代码。
内容的提问来源于stack exchange,提问作者gomd
相关产品推荐
相关产品推荐

