我对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秒。然后摧毁它。
答案 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=
,它还需要没有()
的函数名称。
如果您使用(command
或after
)功能()
运行该功能,结果分配给command=
或使用作为after
的参数。