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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 04:50:23