Tkinter程序运行后显示空白页面问题求助
问题原因
你创建的三个Frame(Menu、loginPage、registerPage)未挂载到主窗口的布局中。Tkinter要求所有可见组件必须通过grid/pack/place方法添加到父容器,否则组件不会显示。
修复方案
在创建Frame后,给每个Frame添加grid布局,让它们填充整个主窗口,同时配置主窗口的行列权重确保布局自适应:
from tkinter import * root = Tk() root.geometry('300x200') # 配置主窗口行列权重,让Frame随窗口大小变化填充空间 root.grid_rowconfigure(0, weight=1) root.grid_columnconfigure(0, weight=1) Menu = Frame(root) loginPage = Frame(root) registerPage = Frame(root) # 将三个Frame都布局到主窗口的同一位置,通过tkraise切换显示 Menu.grid(row=0, column=0, sticky="nsew") loginPage.grid(row=0, column=0, sticky="nsew") registerPage.grid(row=0, column=0, sticky="nsew") def show_frame(frame): frame.tkraise() show_frame(Menu) # Menu Page Menu.grid_columnconfigure(0, weight=1) TitleF1 = Label(Menu, text="Menu", font=("Arial", 25), bg="#B3C7D6") TitleF1.grid(row=0, column=0, pady=25) MenuButton1 = Button(Menu, width=25, text="Login", command=lambda: show_frame(loginPage)) MenuButton1.grid(row=1, column=0) MenuButton2 = Button(Menu, width=25, text="Register", command=lambda: show_frame(registerPage)) MenuButton2.grid(row=2, column=0, pady=10) # Login Page loginUsernameL = Label(loginPage, text='Username').place(x=30, y=60) loginUsernameE = Entry(loginPage).place(x=120, y=60) loginPasswordL = Label(loginPage, text='Password').place(x=30, y=90) loginPasswordE = Entry(loginPage).place(x=120, y=90) # 给返回按钮添加返回菜单的命令 backButton = Button(loginPage, text='Back', command=lambda: show_frame(Menu)).place(x=0, y=0) loginButton = Button(loginPage, text='Login', width=20).place(x=70, y=150) root.mainloop()
补充说明
- 给登录页的
Back按钮补充了返回菜单的逻辑,否则点击后无响应 - 通过
sticky="nsew"让Frame填充主窗口的所有可用空间,避免窗口大小变化时布局错乱
内容的提问来源于stack exchange,提问作者BluBalloon
相关产品推荐
相关产品推荐

