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

