我在TKinter中制作顶级小部件时遇到了问题。由于某种原因,窗口小部件根本不会淡入,然后它将显示在任务栏中,但只有在单击运行此命令的按钮两次之后(它不应该在任务栏中)。
负责这些问题的代码。
Alpha = 0.0
w1.attributes("-alpha", Alpha)
w1.wm_geometry("+" + str(X) + "+" + str(M))
while 1.0 > Alpha :
Alpha = Alpha + 0.01
w1.attributes("-alpha", Alpha)
sleep(0.005)
这是Windows 7上的python 2.6。
答案 0 :(得分:6)
问题是你的代码永远不允许窗口重绘自己。 Sleep会导致程序停止,因此不会输入事件循环,而是导致窗口被绘制的事件循环。
不是睡觉,而是利用事件循环并每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()