2010-08-03 4 views
2

TKinter에서 최상위 위젯을 페이드 인하는 데 문제가 있습니다. 어떤 이유로 위젯이 전혀 사라지지 않는다면 작업 표시 줄에 나타나지만이 명령을 두 번 실행하는 버튼 (작업 표시 줄에 있지 않아야 함)을 클릭해야만 위젯이 표시됩니다.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) 

는이 문제는 코드가 결코 자신을 다시 그리도록 창을 수 없다는 것입니다 윈도우 7

답변

6

에 파이썬 2.6입니다. Sleep은 프로그램을 멈추게하여 이벤트 루프가 입력되지 않도록하며, 윈도우가 그려지는 이벤트 루프입니다.

수면 대신 이벤트 루프를 활용하고 원하는 알파 투명도를 얻을 때까지 N 밀리 초마다 속성을 업데이트하십시오.

다음은 Mac에서 작동하는 예입니다. 창문에서도 작동한다고 가정합니다.

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

감사합니다. 잠을 자지 못하는 경향이 있습니다. – rectangletangle