2010-08-03 16 views
2

Je n'arrive pas à créer un widget de haut niveau, dans TKinter. Pour quelque raison que ce soit, le widget ne se fond pas du tout, alors il apparaîtra dans la barre des tâches, mais seulement après avoir cliqué deux fois sur le bouton qui exécute cette commande (ce n'est pas supposé être dans la barre des tâches).Problèmes de transparence avec Tkinter

Le code responsable de ces problèmes.

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) 

C'est python 2.6 sur Windows 7.

Répondre

6

Le problème est que votre code ne permet jamais la fenêtre de se redessiner. La mise en veille provoque l'arrêt du programme, de sorte que la boucle d'événements n'est pas entrée et que c'est la boucle d'événements qui provoque le tracé de la fenêtre. Au lieu de dormir, profitez de la boucle d'événements et mettez à jour les attributs toutes les N millisecondes jusqu'à ce que vous obteniez la transparence alpha désirée.

Voici un exemple qui fonctionne sur le mac. Je suppose que cela fonctionne aussi sur les fenêtres.

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

Merci, je n'étais pas au courant que le sommeil avait tendance à le faire. – rectangletangle