You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tkinter中如何让下方LabelFrame随窗口拉伸且与上方无空隙(grid布局)

Tkinter Grid布局问题:让下方LabelFrame随窗口拉伸且无空隙

我是Tkinter新手,正在开发一个用户名(moniker)查询工具的前端。使用grid布局时,尝试通过sticky属性让组件随窗口尺寸调整拉伸,但当前拉伸窗口向下时,上方和下方的LabelFrame之间出现多余空隙。期望下方LabelFrame随窗口拉伸,且不与上方框架产生空隙:已为下方框架设置sticky="nsew",但若为上方框架设置sticky south会导致其也随窗口向下拉伸。

相关代码

def query_window(conn):
    window.destroy()
    q_window = Tk()
    q_window.title('Moniker Lookup')
    q_window.columnconfigure(0, weight=1)
    q_window.rowconfigure(0, weight=1)
    path = os.path.realpath(
        os.path.join(os.getcwd(), os.path.dirname(__file__)))
    icon = PhotoImage(file = path + "..\\assets\\main_icon.png")
    q_window.iconphoto(False, icon)
    #q_window.geometry("700x700")

    #Create a search frame for the moniker search to sit in
    search_frame = tk.LabelFrame(q_window, text='Moniker Search')
    search_frame.rowconfigure(0, weight=1)
    search_frame.columnconfigure(0, weight=1)
    search_frame.grid(row = 0, column=0, pady=GLOBAL_PAD_Y, padx=GLOBAL_PAD_X, sticky="nw")

    #Create a results frame for the treeview widget to sit in.
    output_frame = tk.LabelFrame(q_window, text='Results')
    output_frame.rowconfigure(0, weight=1)
    output_frame.columnconfigure(0, weight=1)
    output_frame.grid(row = 1, column=0, pady=GLOBAL_PAD_Y, padx=GLOBAL_PAD_X, sticky="nsew")

    #Create area for user to provide Moniker
    moniker_label = tk.Label(search_frame, text="Moniker:")
    moniker_label.grid(row=0, column = 2, pady = GLOBAL_PAD_Y, padx = GLOBAL_PAD_X)
    moniker_field = tk.Entry(search_frame)
    moniker_field.grid(row=0, column = 3, pady=GLOBAL_PAD_Y, padx=GLOBAL_PAD_X, columnspan=2)

    #Create a run button
    run_button = tk.Button(search_frame, text="Run", command=lambda:
    moniker_query(moniker_field, conn, q_window), width=10)
    run_button.grid(row=0, column = 5, pady = GLOBAL_PAD_Y, padx = GLOBAL_PAD_X)

    #Create a treeview to display output
    tv1 = ttk.Treeview(output_frame)
    tv1.columnconfigure(0, weight=1)
    tv1.rowconfigure(0, weight=1)

    #Create the tree scrolls
    tree_scroll_y = tk.Scrollbar(output_frame, orient = "vertical", command=tv1.yview)
    tree_scroll_x = tk.Scrollbar(output_frame, orient="horizontal", command=tv1.xview)
    tv1.configure(xscrollcommand=tree_scroll_x.set, yscrollcommand=tree_scroll_y.set)
    tv1.grid(row=0, column=0, pady = GLOBAL_PAD_Y, padx = GLOBAL_PAD_X, sticky="nsew")
    tree_scroll_x.grid(row=1, column=0, sticky=tk.E+tk.W)
    tree_scroll_x.grid_rowconfigure(0, weight=1)
    tree_scroll_y.grid(row=0, column=1, sticky=tk.N+tk.S)
    tree_scroll_x.grid_columnconfigure(0, weight=1)

窗口状态截图

  • 默认状态:
    窗口默认状态
  • 拉伸后状态:
    窗口拉伸后状态

解决方案

问题核心在于主窗口的行权重配置错误,以及上方框架的sticky属性设置不当。修改步骤如下:

  1. 调整主窗口的行权重:
    将主窗口的行配置代码:
q_window.rowconfigure(0, weight=1)

替换为:

q_window.rowconfigure(0, weight=0)  # 上方框架不分配垂直方向额外空间,保持固定高度
q_window.rowconfigure(1, weight=1)  # 下方框架分配所有垂直额外空间,随窗口拉伸
  1. 修改上方框架的sticky属性:
    将search_frame.grid的sticky参数从"nw"改为"ew",让上方框架仅在水平方向拉伸,垂直方向保持原高度:
search_frame.grid(row = 0, column=0, pady=GLOBAL_PAD_Y, padx=GLOBAL_PAD_X, sticky="ew")

修改完成后,拉伸窗口时上方搜索框架会水平铺满窗口,高度固定;下方结果框架会填充所有垂直方向的额外空间,两者之间不会出现空隙。


内容的提问来源于stack exchange,提问作者Buzzkillionair

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 00:20:45