Tkinter透明度有问题

时间:2010-08-03 19:02:31

标签: python windows-7 transparency tkinter fadein

我在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。

1 个答案:

答案 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()