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

如何用grid()替换pack()实现Tkinter状态栏底部自适应

用grid()替代pack()实现固定底部的状态栏

需求说明

现有代码通过pack()实现了状态栏固定在窗口底部,且窗口调整大小时自动填充宽度,需替换为grid()实现相同效果。

修改后的完整代码

import tkinter as tk
from tkinter import ttk

colour='blue'

class StatusBar(ttk.Frame):   
    def __init__(self, container):
        super().__init__(container) 

        self.columnconfigure(0, weight=1)
        self.rowconfigure(0, weight=1) 
    
        self.label=tk.Label(self, text="STATUS BAR")
        self.label.grid(sticky="ew")  # 让标签填满状态栏宽度

        # 替换pack为grid,固定在底部并水平填充
        self.grid(row=1, column=0, sticky="ew")


class App(tk.Tk):
    
    def __init__(self):
        super().__init__()

        self.title('Replace')
        self.geometry('800x500')
        self.resizable(1, 1)
        self.configure(bg=colour)   
        
        # 配置主窗口的列和行,确保布局随窗口调整
        self.columnconfigure(0, weight=1)
        self.rowconfigure(0, weight=1)


if __name__ == "__main__":
    
    app = App()
    sb = StatusBar(app)
    app.mainloop()

关键改动说明

  • 主窗口布局配置:在App类的__init__中添加self.columnconfigure(0, weight=1)和self.rowconfigure(0, weight=1)。前者让第0列随窗口宽度扩展,保证状态栏能填满整行;后者让第0行占据窗口的剩余垂直空间,迫使状态栏固定在第1行(底部)。
  • 状态栏的grid布局:将self.pack(fill='x', expand=True, anchor='s')替换为self.grid(row=1, column=0, sticky="ew")。row=1指定位置在底部行,column=0占据整列,sticky="ew"让组件水平填充所在单元格。
  • 标签的自适应调整:给self.label.grid()添加sticky="ew",确保标签也能填满状态栏的宽度,避免窗口调整时标签内容居中且宽度固定。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 02:42:13