使用Tkinter创建窗口类无报错却无显示,请问遗漏了什么?
解决Tkinter窗口不显示的问题
我帮你找到了代码里的两个关键问题,这就是界面完全不显示的核心原因:
第一个错误:入口判断的拼写失误
你写的if __name__ == 'main__':是错误的,正确格式应该是if __name__ == '__main__':(前后都是双下划线)。这个拼写错误直接导致你的main()函数根本没有被执行。第二个错误:缺少主事件循环
Tkinter程序必须调用root.mainloop()来启动事件循环,否则窗口会在创建后立刻退出,你根本来不及看到界面。
另外,如果你想测试第二个窗口Entrypage,还需要触发EntryWin方法——比如加个按钮来调用它,不然第二个窗口不会自动显示。
下面是修正后的完整代码:
from tkinter import Tk, Frame, Toplevel, Button # 明确导入所需组件 def main(): root = Tk() app = startpage(root) root.mainloop() # 启动Tkinter主事件循环 class startpage: def __init__(self, master): self.master = master self.master.title("Main Page") self.master.geometry('1350x750+0+0') self.master.config(bg = "blue") self.frame = Frame(self.master, bg = 'blue') self.frame.pack(fill="both", expand=True) # 让Frame填满整个窗口 # 添加按钮触发第二个窗口 self.open_entry_btn = Button(self.frame, text="打开录入页面", command=self.EntryWin, bg="white") self.open_entry_btn.pack(pady=20) def EntryWin(self): self.Entry_win = Toplevel(self.master) self.app = Entrypage(self.Entry_win) class Entrypage: def __init__(self, master): self.master = master self.master.title("Entry Page") self.master.geometry('1350x750+0+0') self.master.config(bg = "green") self.frame = Frame(self.master, bg = 'green') # 匹配窗口背景色 self.frame.pack(fill="both", expand=True) if __name__ == '__main__': # 修正拼写错误 main()
我还做了几个小优化:
- 明确导入Tkinter组件,避免隐式导入的潜在问题
- 给Frame添加
fill="both", expand=True,让它填满父窗口,不然背景色只会显示一小块 - 让Entrypage的Frame背景色和窗口一致,视觉更协调
- 添加触发按钮,方便你测试多窗口切换功能
现在运行修正后的代码,就能看到蓝色主窗口,点击按钮还能打开绿色的录入页面啦。
内容的提问来源于stack exchange,提问作者user3064089
相关产品推荐
相关产品推荐

