的問題是,你的代碼永遠不會允許窗口重繪自身。睡眠會導致程序停止,因此不會輸入事件循環,並且這是導致窗口被繪製的事件循環。
不是睡覺,而是利用事件循環,每N毫秒更新一次屬性,直到獲得所需的alpha透明度。
下面是一個可在mac上使用的例子。我認爲它也適用於Windows。
import Tkinter as tk
class App:
def __init__(self):
self.root = tk.Tk()
self.count = 0
b=tk.Button(text="create window", command=self.create_window)
b.pack()
self.root.mainloop()
def create_window(self):
self.count += 1
t=FadeToplevel(self.root)
t.wm_title("Window %s" % self.count)
t.fade_in()
class FadeToplevel(tk.Toplevel):
'''A toplevel widget with the ability to fade in'''
def __init__(self, *args, **kwargs):
tk.Toplevel.__init__(self, *args, **kwargs)
self.attributes("-alpha", 0.0)
def fade_in(self):
alpha = self.attributes("-alpha")
alpha = min(alpha + .01, 1.0)
self.attributes("-alpha", alpha)
if alpha < 1.0:
self.after(10, self.fade_in)
if __name__ == "__main__":
app=App()
謝謝,我不知道睡眠有這樣做的傾向。 – rectangletangle 2010-09-04 21:25:54