2013-03-29 2 views
0

어리석은 질문일지도 모릅니다. Tkinter GUI에 레이블이 있는데, 시간이지나면서 업데이트되기를 원합니다.Python Tkinter 레이블 지연

예 : 나는 기다립니다와 같은 뭔가를 찾고 after() 방법하지만 메신저에 대해 읽은

Msglabel=Tkinter.Label(... text="") 

Msglabel.Cofigure(text=" EXAMPLE!") 

Wait(5sec) 

Msglabel.Configure(text=" NEW EXAMPLE!") 

.

답변

2

Tkinter는 단일 스레드 루프에서 UI를 업데이트하므로 대기 기간 동안 컨트롤을 Tkinter로 넘겨야합니다.

구성 호출간에 잠시 기다리면 UI가 중단됩니다.

언급 한대로 after은 원하는 방법입니다. 다음과 같이 시도해보세요.

try: 
    import Tkinter as tkinter # Python 2 
except ImportError: 
    import tkinter # Python 3 
import itertools 


class MyApplication(object): 
    def __init__(self): 
     # Create and pack widgets 
     self.root = tkinter.Tk() 
     self.label = tkinter.Label(self.root) 
     self.button = tkinter.Button(self.root) 
     self.label.pack(expand=True) 
     self.button.pack() 

     self.label['text'] = 'Initial' 
     self.button['text'] = 'Update Label' 
     self.button['command'] = self.wait_update_label 

     # Configure label values 
     self.label_values = itertools.cycle(['Hello', 'World']) 

    def launch(self): 
     self.root.mainloop() 

    def wait_update_label(self): 
     def update_label(): 
      value = next(self.label_values) 
      self.label['text'] = value 

     update_period_in_ms = 1500 
     self.root.after(update_period_in_ms, update_label) 
     self.label['text'] = 'Waiting...' 


if __name__ == '__main__': 
    app = MyApplication() 
    app.launch()