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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 04:30:51