Python Tkinter:如何让Grid布局的Notebook铺满整个窗口
让Tkinter Notebook铺满整个窗口的解决方案
要实现Notebook占满Grid布局(0,0)位置的整个窗口,即使内部Frame内容不足,需要从两个层面调整布局参数:
1. 让Notebook占满父窗口的Grid单元格
修改App类的布局配置,给父窗口的行和列设置拉伸权重,同时让Notebook填充整个单元格:
class App(Tk): def __init__(self) -> None: super().__init__() # 配置父窗口的行、列权重,使单元格随窗口拉伸 self.grid_rowconfigure(0, weight=1) self.grid_columnconfigure(0, weight=1) # Widgets self.notebook = Notebook(self) # 用sticky="nsew"让Notebook向上下左右填充整个单元格 self.notebook.grid(row=0, column=0, sticky="nsew") # 修正ControlFrame的master为notebook,确保它是Notebook的直接子组件 self.control_frame = ControlFrame(self.notebook) self.notebook.add(self.control_frame, text="Control")
2. 让Notebook内的Frame占满Notebook空间
修改ControlFrame类,配置其内部行、列的拉伸权重,让组件随Frame拉伸:
class ControlFrame(Frame): def __init__(self, master): super().__init__(master) # 配置Frame的列权重,让所有列横向拉伸 self.grid_columnconfigure(0, weight=1) # 让Text所在的行纵向拉伸,占满剩余空间 self.grid_rowconfigure(2, weight=1) self.control_bar = ControlBar(self) # 让ControlBar横向填充所在单元格 self.control_bar.grid(row=0, column=0, sticky="ew") self.connect_btn = Button(self, text="Connect") self.connect_btn.grid(row=1, column=0, pady=5) self.log = Text(self) # 让Text向上下左右填充所在单元格,去掉固定width限制 self.log.grid(row=2, column=0, sticky="nsew", padx=5, pady=5)
核心参数说明
sticky="nsew":控制组件向上下左右四个方向拉伸,填满所在的Grid单元格grid_rowconfigure/grid_columnconfigure(..., weight=1):设置行/列的拉伸权重,窗口大小变化时,有权重的行/列会分配额外空间- 修正
ControlFrame的父组件为Notebook:确保Frame是Notebook的直接子元素,才能正确继承Notebook的布局空间
内容的提问来源于stack exchange,提问作者Latex User 101
相关产品推荐
相关产品推荐

