2009-04-23 4 views
3

나를 위해 특정 백그라운드 작업을 수행하는 EVT_IDLE 처리기를 정의했습니다. (그 작업은 몇 가지 프로세스에서 완료된 작업을 가져와 일부 개체에 통합하여 GUI에서 눈에 보이는 변화를 만들어내는 것입니다.)wxPython : EVT_IDLE 사용

문제는 사용자가 마우스를 움직이거나 아무것도하지 않을 때 EVT_IDLE이 한 번 이상 부르지 않아. 이 처리기가 항상 작동하고 싶습니다. 그래서 핸들러의 끝에 event.RequestMore()을 호출 해 보았습니다. 작동하지만, 이제는 CPU가 많이 필요합니다. (나는 그 일을 과도하게 반복하고있는 것 같아요.)

나는 초당 작업이 수행되는 횟수를 제한하려고합니다. 어떻게해야합니까?

다른 해결책이 있습니까?

... 

def On_Idle(self, event): 
    if not self.queued_batch: 
     wx.CallLater(1000, self.Do_Batch) 
     self.queued_batch = True 

def Do_Batch(self): 
    # <- insert your stuff here 
    self.queued_batch = False 

... 

아, 그리고 어떤 방법으로 event.RequestMore()를 생성자에서 False로 self.queued_batch을 설정하고 어쩌면 전화하는 것을 잊지 마세요 :이 같은

답변

2

뭔가 (최대 초마다 실행) On_Idle에서.

0

이것은 wxIdleEvent 대신 wxTimerEvent의 사용 사례처럼 들립니다. 호출을 처리 할 때 wxTimerEvent.Start(). 해야 할 일이 없으면 wxTimerEvent.Stop()을 호출하고 메소드를 호출하여 EVT_TIMER에서 처리합니다.

(참고 : 저는 wxWidghets에서 C++로 사용하고 wxPython에 익숙하지 않지만 비슷한 API를 가지고 있다고 가정합니다)