2009-04-14 45 views

Trả lời

0

Bạn có nghĩa là bạn muốn có một công văn sự kiện?

:: wxPostEvent trống wxPostEvent (wxEvtHandler * dest, wxEvent & sự kiện)

Trong một ứng dụng GUI, chức năng này bài viết sự kiện vào quy định dest đối tượng sử dụng wxEvtHandler :: AddPendingEvent. Nếu không, nó sẽ gửi sự kiện ngay lập tức bằng cách sử dụng wxEvtHandler :: ProcessEvent. Xem tài liệu tương ứng để biết chi tiết (và cẩn thận).

Bao gồm các file

<wx/app.h>

wxPython API docs

+2

Tôi không biết C, đây là khó hiểu. Bạn có thể cho tôi dòng Python mà tôi phải chạy không? –

+0

Tôi nghĩ nó giống nhau. wx.core.PostEvent? Kiểm tra: http://www.google.com/codesearch?q=wxPostEvent&hl=vi&btnG=Search+Code –

+0

Tôi không thấy nó trong không gian tên wx chính, cũng như trong không gian tên của Sự kiện. –

48

Chủ đề cũ, nhưng tôi nghĩ rằng tôi đã nhận ra điều này sau khi bị nhầm lẫn về nó trong một thời gian dài, vì vậy nếu có ai khác đến đây tìm câu trả lời, điều này có thể hữu ích.

Để tự gửi một sự kiện, bạn có thể sử dụng

self.GetEventHandler().ProcessEvent(event) 

(wxWidgets docs here, wxPython docs here)

hoặc

wx.PostEvent(self.GetEventHandler(), event) 

(wxWidgets docs, wxPython docs)

nơi event là sự kiện bạn muốn đăng. Tạo sự kiện với ví dụ:

wx.PyCommandEvent(wx.EVT_BUTTON.typeId, self.GetId()) 

nếu bạn muốn đăng sự kiện EVT_BUTTON. Làm cho nó một PyCommandEvent có nghĩa là nó sẽ lan truyền lên trên; các loại sự kiện khác không truyền theo mặc định.

Bạn cũng có thể tạo sự kiện tùy chỉnh có thể mang bất kỳ dữ liệu nào bạn muốn. Dưới đây là một ví dụ:.!

myEVT_CUSTOM = wx.NewEventType() 
EVT_CUSTOM = wx.PyEventBinder(myEVT_CUSTOM, 1) 

class MyEvent(wx.PyCommandEvent): 
    def __init__(self, evtType, id): 
     wx.PyCommandEvent.__init__(self, evtType, id) 
     myVal = None 

    def SetMyVal(self, val): 
     self.myVal = val 

    def GetMyVal(self): 
     return self.myVal 

(Tôi nghĩ rằng tôi đã tìm thấy mã này trong một kho lưu trữ mailing list ở đâu đó, nhưng tôi dường như không thể tìm thấy nó một lần nữa Nếu đây là ví dụ của bạn, nhờ Vui lòng thêm một lời nhận xét và chịu tín dụng cho nó!)

Vì vậy, bây giờ, để Đăng một sự kiện tùy chỉnh:

event = MyEvent(myEVT_CUSTOM, self.GetId()) 
event.SetMyVal('here is some custom data') 
self.GetEventHandler().ProcessEvent(event) 

và bạn có thể gắn nó giống như bất kỳ sự kiện khác

self.Bind(EVT_CUSTOM, self.on_event) 

và lấy dữ liệu tùy chỉnh trong xử lý sự kiện

def on_event(self, e): 
    data = e.GetMyVal() 
    print 'custom data is: {0}'.format(data) 

Hoặc bao gồm dữ liệu tùy chỉnh trong hàm tạo sự kiện và lưu một bước:

class MyEvent(wx.PyCommandEvent): 
    def __init__(self, evtType, id, val = None): 
     wx.PyCommandEvent.__init__(self, evtType, id) 
     self.myVal = val 

, vv

Hy vọng điều này là hữu ích cho một ai đó.

5

Có một cách đơn giản đơn giản để làm điều đó với phiên bản gần đây của wxPython (xem http://wiki.wxpython.org/CustomEventClasses):

# create event class 
    import wx.lib.newevent 
    SomeNewEvent, EVT_SOME_NEW_EVENT = wx.lib.newevent.NewEvent() 

    # post it, with arbitrary data attached 
    wx.PostEvent(target, SomeNewEvent(attr1=foo, attr2=bar)) 

    # bind it as usual 
    target.Bind(EVT_SOME_NEW_EVENT, target.handler) 
Các vấn đề liên quan