如何用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
相关产品推荐
相关产品推荐

