当我启动Tkinter时,如何防止两个根窗口出现?

时间:2013-04-14 01:04:55

标签: python tkinter smtp

问题

如何隐藏程序中弹出的两个Tkinter根窗口?我曾尝试使用root.widthdraw()Here is a link to my Pastebin.

背景

我正在尝试创建一个真正的基本电子邮件客户端,以了解有关Tkinter和SMTP的更多信息。我已经决定我的程序将首先创建一个Toplevel窗口,用户将在其中输入其凭据,如果服务器可以对其进行身份验证,则程序将打开电子邮件发送对话框。令人讨厌的是,我无法隐藏程序启动时打开的另外两个根窗口。我试图使用root.widthdraw()来避免此问题。

相关代码

#-----Authen is a toplevel class-------------

passcheck = Authen()

root = Tk()
root.mainloop()
root.widthdraw()

2 个答案:

答案 0 :(得分:2)

您应该在创建任何其他窗口之前创建根窗口。否则,您将得到您所观察到的内容:Tkinter将在您第一次创建其他窗口小部件时自动创建根窗口,并且您正在创建第二个窗口小部件。

答案 1 :(得分:1)

我正在使用默认的tkinter包运行Python2.7,而我的root对象没有withdraw()方法。除此之外,您还可以在名为mainloop的{​​{1}}之外运行toplevel,它会为您保存一个窗口。

passcheck

然后:

class Authen(Frame):
    def __init__(self, master):
        Frame.__init__(self, master)

编辑:这是一个解决方案,而不是root = Tk() passcheck = Authen(root) root.mainloop() Authen,而是让它成为TopLevel,并传递Frame作为主人。 http://pastebin.com/TtnvU0er