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

如何解决Tkinter的Toplevel顶层窗口中按钮无法显示的问题

修复方案

你创建错误弹窗的Ok按钮后,没有调用布局方法将按钮挂载到弹窗容器上,所以按钮不会被渲染显示,只需给按钮补上pack()调用即可解决问题。

修改后的核心方法代码

def loginErrorWdw(self):
    err = tk.Toplevel(self)
    err.title("错误")
    l = tk.Label(err, text="登录信息无效!程序即将退出。")
    l.pack(side="top", expand=False, padx=20, pady=20)
    btn=tk.Button(err, text="确认", command=self.exitBtn)
    # 新增此行渲染按钮
    btn.pack(pady=(0,20))

完整修复后代码

from tkinter.ttk import *
from tkinter import messagebox
import tkinter as tk
import sys
import os

class Login(Frame):

    def __init__(self,master):
        Frame.__init__(self,master)
        self.grid()
        self.loginWidgets()

    def loginWidgets(self):
        self.userlbl = Label(self, text="输入用户名: ")
        self.userlbl.grid()
        self.unEntry = Entry(self)
        self.unEntry.grid(row=0, column=1, sticky=W)
        self.pwlbl = Label(self, text="输入密码: ")
        self.pwlbl.grid(row=1, column=0, sticky=W)
        self.pwEntry = Entry(self, show="*")
        self.pwEntry.grid(row=1, column=1, sticky=W)
        self.submitBtn = Button(self, text="登录", command=self.checkLogin) 
        self.submitBtn.grid(row=2, column=1, sticky=W)

    def loginErrorWdw(self):
        err = tk.Toplevel(self)
        err.title("错误")
        l = tk.Label(err, text="登录信息无效!程序即将退出。")
        l.pack(side="top", expand=False, padx=20, pady=20)
        btn=tk.Button(err, text="确认", command=self.exitBtn)
        btn.pack(pady=(0,20))
        
    def exitBtn(self):
        # 可选优化:替换os._exit(0)为sys.exit(),更符合常规退出逻辑
        sys.exit(0)
        
    def mainWdw(self):
        messagebox.showinfo('主窗口','登录成功弹窗')
        
    def checkLogin(self):
        user = self.unEntry.get()
        pw = self.pwEntry.get()
        if user == "admin":
            if pw == "lbymf1d":
                self.mainWdw()
            else:
                self.loginErrorWdw()
        else:
            self.loginErrorWdw()
            

# 测试账号:用户名 admin  密码 lbymf1d
    
window = Tk()
window.title("登录界面")

# 窗口大小
window.geometry('700x300')
login = Login(window)

# 窗口主循环
window.mainloop()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 19:12:02