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

