Tener problemas con la transparencia Tkinter

Estoy teniendo problemas para hacer que un widget de nivel superior se desvanezca, en TKinter. Por alguna razón, el widget no aparece en absoluto, entonces aparecerá en la barra de tareas, pero solo después de hacer clic en el botón que ejecuta este comando dos veces (no se supone que esté en la barra de tareas).

El código responsable de estos problemas.

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) 

Esto es Python 2.6 en Windows 7.

El problema es que su código nunca permite que la ventana se vuelva a dibujar. La suspensión hace que el progtwig se detenga, por lo que no se ingresa al bucle de eventos, y es el bucle de eventos lo que hace que se dibuje la ventana.

En lugar de dormir, aproveche el bucle de eventos y actualice los atributos cada N milisegundos hasta que obtenga la transparencia alfa deseada que desea.

Aquí hay un ejemplo que funciona en el mac. Supongo que también funciona en las ventanas.

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