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

如何设置Tkinter Notebook组件尺寸以适配主窗口全屏?

解决Tkinter Notebook无法适配主窗口尺寸的问题

你的问题核心在于没有配置主窗口grid布局的行和列权重,导致Notebook组件无法随窗口拉伸。同时登录区域的布局方式也需要调整,避免影响主内容区的填充。以下是具体的修改方案:

修改后的完整代码

import tkinter as tk
import ttkbootstrap as ttk
from ttkbootstrap.constants import *


class MainApp(tk.Tk):
    def __init__(self):
        tk.Tk.__init__(self)
        self.title("Youtube Manager")
        self.state("zoomed")

        # 配置主窗口的grid布局权重:让第1行(Notebook所在行)和第0列占满剩余空间
        self.grid_rowconfigure(1, weight=1)
        self.grid_columnconfigure(0, weight=1)

        # 将登录组件放入单独的Frame,便于布局管理
        login_frame = ttk.Frame(self, bootstyle="primary")
        login_frame.grid(row=0, column=0, sticky="EW", padx=5, pady=5)
        # 配置login_frame的列权重,让输入框可以适当拉伸
        login_frame.grid_columnconfigure(1, weight=1)
        login_frame.grid_columnconfigure(3, weight=1)

        # 登录组件
        self.login = ttk.Label(login_frame, bootstyle="primary", text="Login :")
        self.login_input = ttk.Entry(login_frame, bootstyle="primary", width=30)

        self.pwd = ttk.Label(login_frame, bootstyle="primary", text="Mot de passe :")
        self.pwd_input = ttk.Entry(login_frame, bootstyle="primary", width=30)

        self.btn_connect = ttk.Button(login_frame, bootstyle="success", text="Connexion")

        self.separator = ttk.Separator(self, bootstyle="primary", orient="horizontal")
        self.separator.grid(row=0, column=0, sticky="EW", pady=(5,0))

        # 布局登录组件
        self.login.grid(row=0, column=0, padx=2, pady=1)
        self.login_input.grid(row=0, column=1, padx=2, sticky="EW")

        self.pwd.grid(row=0, column=2, padx=2, pady=1)
        self.pwd_input.grid(row=0, column=3, padx=2, sticky="EW")

        self.btn_connect.grid(row=0, column=4, padx=2)

        # 创建并布局Notebook
        self.notebook = ttk.Notebook(self, bootstyle="primary")
        # 添加测试标签页,方便验证效果
        tab1 = ttk.Frame(self.notebook)
        tab2 = ttk.Frame(self.notebook)
        self.notebook.add(tab1, text="标签页1")
        self.notebook.add(tab2, text="标签页2")
        # 让Notebook占满第1行的整个空间
        self.notebook.grid(row=1, column=0, sticky='NSWE')

关键修改点说明

  • 配置主窗口行/列权重:通过self.grid_rowconfigure(1, weight=1)和self.grid_columnconfigure(0, weight=1),指定第1行和第0列在窗口大小变化时自动填充剩余空间。
  • 登录组件独立封装:将登录相关元素放入login_frame,避免直接在主窗口布局导致的列混乱,同时可以单独配置登录区域的拉伸规则。
  • 调整Notebook布局:将Notebook放在第1行第0列,设置sticky='NSWE'使其向四个方向拉伸,不需要多余的columnspan,因为第0列已经配置了权重。
  • 添加测试标签页:原代码中Notebook没有子组件,添加后可以直观看到Notebook的填充效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 17:52:45