在tkinter中的mainloop之后在窗口上调用destroy()方法

时间:2014-02-28 12:44:28

标签: python-2.7 tkinter splash-screen

我对Python和Tkinter相对较新,我正在努力了解mainloop和after方法的工作原理。 更具体地说,我想创建一个splashScreen,它会在一段时间后消失,然后显示实际的mainWindow。

我的代码如下所示:

class SplashScreen:
    # some code here

    def destroyMe(self):
        self.destroy()

    def destroySplashScreen(self, timeToSleep=0):
        if timeToSleep > 0:
            self.master.after(timeToSleep*1000, self.destroyMe())

    # some other code here

if __name__ == '__main__':
    root = Toplevel()
    mySP = SplashScreen(root)
    mySP.populateSplashScreen()
    mySP.destroySplashScreen(5)
    root.mainloop()

然而,代码所做的是在给定的时间帧(5秒)之后创建整个窗口而没有任何内容。相反,它应该创建它,等待5秒。然后摧毁它。

1 个答案:

答案 0 :(得分:0)

工作示例

after只需要函数名称(不含())。

destroy()需要self.master

from Tkinter import *

class SplashScreen:

    # some code here

    def __init__(self, master):
        self.master = master
        self.master.title("SplashScreen")

    def destroyMe(self):
        self.master.destroy()

    def destroySplashScreen(self, timeToSleep=0):
        if timeToSleep > 0:
            self.master.after(timeToSleep*1000, self.destroyMe)

    # some other code here

if __name__ == '__main__':
    root = Toplevel()
    mySP = SplashScreen(root)
    #mySP.populateSplashScreen()
    mySP.destroySplashScreen(3)
    root.mainloop()

BTW:Toplevel用于创建“子”窗口,因此(在示例中)它自动创建“父”窗口 - 所以我添加title("SplashScreen")

顺便说一句:如果您在小部件中使用command=,它还需要没有()的函数名称。

如果您使用(commandafter)功能()运行该功能,结果分配给command=或使用作为after的参数。