2009-03-12 3 views
5

내 최상위 윈도우는 커스텀 컨트롤의 내부 상태가 변경되어 GUI의 다른 여러 부분을 업데이트 할 수있는시기를 알아야합니다. 컨트롤에서 사용자 지정 이벤트를 생성하여 전파하고 최상위 창에서 처리하도록하려면 어떻게해야합니까?wxPython에서 커스텀 CommandEvent 생성하기

답변

12

나는이 오래된 알고 wxPython에서이 작업을 수행하는 좀 더 새롭고 약간 좋은 방법이 있습니다. http://wiki.wxpython.org/CustomEventClasses 및 상기에서 인용 함 :

이벤트 정의 :

import wx.lib.newevent 
QuantityChangedEvent, EVT_QUANTITY_CHANGED = wx.lib.newevent.NewCommandEvent() 

이벤트를 생성하려면

event = QuantityChangedEvent(self.GetId()) 
self.GetEventHandler().ProcessEvent(event) 
# or ... 
#wx.PostEvent(self, event) 

이벤트를 결합하는 것은 동일하다.

11

전파하려면 이벤트가 wx.CommandEvent이어야합니다. (전파에 대한 자세한 내용은 wxWidgets event handling overview을 참조하십시오.) 더 구체적으로는 wx.PyCommandEvent이어야하며 파이썬을 인식하고 wxWidgets 이벤트 시스템을 통해 Python 비트를 안전하게 전송할 수 있으며 이벤트 핸들러가 호출 될 때도 계속 존재하게 할 수 있습니다 . 다음과 같이

는 사용자 정의 이벤트 유형을 정의

EVT_QUANTITY_CHANGED = wx.PyEventBinder(wx.NewEventType(), 1) 

당신은 아마 모듈 수준에서이 작업을 수행하려면, 어떤 상황에서 컨트롤의 __init__ 방법에서이 작업을 수행하는 것이 바람직 할 수도있다. 다음과 같이

컨트롤은 이제 이벤트를 생성 할 수 있습니다

event = wx.PyCommandEvent(EVT_QUANTITY_CHANGED.typeId, self.GetId()) 
self.GetEventHandler().ProcessEvent(event) 

결합하여 일반적인 방법으로 이벤트를 처리 할 수있는 최상위 창

self.Bind(mycontrol.EVT_QUANTITY_CHANGED, self.OnQuantityChanged) 
관련 문제