2012-12-06 2 views
1

이를 고려 파이썬 : 대화 상자 창을 보여주고, 동시에 작업하는 방법

import wx, time 

# STEP 1: Setup Window 
class Window(wx.Frame): 
    def __init__(self,parent,id): 
     wx.Frame.__init__(self,parent,id,'Bobby the Window', size=(300,200)) 
     panel = wx.Panel(self) 
     self.Bind(wx.EVT_CLOSE, self.closewindow) 

    wx.StaticText(panel, -1, "Yo user, the program is busy doing stuff!", (50,100), (200,100)) 

def closewindow(self, event): 
    self.Destroy() 

# STEP 2: Show Window (run in background, probably with threading, if that is the best way) 
if __name__=='__main__': 
    app = wx.PySimpleApp() 
    frame = Window(parent=None,id=-1) 
    frame.Show() 
    app.MainLoop() 

# STEP 3: Do work 
time.sleep(5) 

# STEP 4: Close Window, and show user evidence of work 
## *Update window to say: "I am done, heres what I got for you: ^blah blah info!^"* 
exit() 

내 질문

은 다음과 같습니다

나는 ESP (창에 텍스트를 변경 어떻게 4 단계에서
  • 스레드에있는 경우)?
  • 2 단계에서 백그라운드로 창을 실행하지만 어떻게 계속 통신 할 수 있습니까? (텍스트 등을 업데이 트)

이것은 GUI 진행 창을 제외하고 동시에 진행률 표시 줄을 실행하고 동시에 작업하는 방법에 대한 내 질문과 비슷합니다.

StaticText를 변경하려면 'text.SetLabel ("BLAH!")'을 사용하는 것이 좋지만 배경에서 실행중인 경우 어떻게 window 클래스와 통신 할 수 있습니까?

업데이트 : This thread 또한 도움이되었습니다.

답변

1

장기 실행 프로세스를 실행해야하는 경우 일부 유형의 스레딩 또는 다중 처리 모듈을 사용해야합니다. 그렇지 않으면 GUI의 기본 루프를 차단하고 응답하지 않게됩니다. 스레드로부터 GUI와 통신하려면 wxPython의 threadsafe 메소드를 사용해야합니다. 그들은 wx.CallAfter, wx.CallLater 및 wx.PostEvent입니다.

다음에 wxPython을 스레드에 대한 자세한 내용을보실 수 있습니다 :

관련 문제