2009-04-14 12 views

उत्तर

10

शामिल करें।

long running tasks on the wxPython wiki के लिए अन्य धागे से ईवेंट पोस्ट करने के बारे में कुछ जानकारी भी है।

0

आपका मतलब है कि आप एक ईवेंट प्रेषण चाहते हैं?

:: wxPostEvent शून्य wxPostEvent (wxEvtHandler * गंतव्य, wxEvent & घटना)

एक जीयूआई आवेदन में, इस समारोह पदों निर्दिष्ट गंतव्य wxEvtHandler :: AddPendingEvent का उपयोग कर ऑब्जेक्ट के लिए घटना। अन्यथा, यह तुरंत wxEvtHandler :: ProcessEvent का उपयोग कर ईवेंट भेजता है। विवरण (और चेतावनी) के लिए संबंधित दस्तावेज़ीकरण देखें।

मुझे लगता है कि आप wx.PostEvent चाहते फ़ाइलों

<wx/app.h>

wxPython API docs

+2

मैं सी पता नहीं है, यह भ्रामक है। क्या आप मुझे पाइथन लाइन दे सकते हैं जिसे मैं दौड़ना चाहता हूं? –

+0

मुझे लगता है कि यह वही है। wx.core.PostEvent? जांचें: http://www.google.com/codesearch?q=wxPostEvent&hl=hi&btnG=Search+Code –

+0

मुझे इसे मुख्य Wx नेमस्पेस में नहीं देखा गया है, न ही ईवेंट के नामस्थान में। –

48

पुराना विषय, लेकिन मुझे लगता है कि मुझे इसके बारे में लंबे समय तक भ्रमित होने के बाद यह पता चला है, इसलिए यदि कोई और यहां उत्तर की तलाश में आता है, तो इससे मदद मिल सकती है।

मैन्युअल एक घटना पोस्ट करने के लिए (, wxPython डॉक्स here wxWidgets डॉक्स here)

या

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

(wxWidgets docs, wxPython docs)

आप

self.GetEventHandler().ProcessEvent(event) 

उपयोग कर सकते हैं, जहां event वह ईवेंट है जिसे आप पोस्ट करना चाहते हैं। उदाहरण के साथ घटना का निर्माण

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

यदि आप EVT_BUTTON ईवेंट पोस्ट करना चाहते हैं। इसे PyCommandEvent बनाना मतलब है कि यह ऊपर की ओर प्रचार करेगा; अन्य घटना प्रकार डिफ़ॉल्ट रूप से प्रचार नहीं करते हैं।

आप कस्टम ईवेंट भी बना सकते हैं जो आप चाहते हैं कि जो भी डेटा ले जा सकते हैं। यहाँ एक उदाहरण है:।!

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 

(मुझे लगता है मैं एक मेलिंग सूची संग्रह कहीं में इस कोड को पाया लगता है, लेकिन मैं इसे फिर से खोजने के लिए नहीं कर पा रहे यह आपके उदाहरण है, तो धन्यवाद कोई टिप्पणी दें और ले कृपया इसके लिए क्रेडिट!)

तो अब, एक कस्टम घटना पोस्ट करने के लिए:

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

और आप इसे किसी भी अन्य घटना

self.Bind(EVT_CUSTOM, self.on_event) 

तरह बाध्य कर सकते हैं और ईवेंट हैंडलर में कस्टम डेटा प्राप्त

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

या ईवेंट कन्स्ट्रक्टर में कस्टम डेटा शामिल करें और एक चरण सहेजें:

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

आदि

आशा इस किसी के लिए उपयोगी है।

5

एक सरल, सीधा (http://wiki.wxpython.org/CustomEventClasses देखें) wxPython के हाल के संस्करणों के साथ यह करने के लिए तरीका उपलब्ध नहीं है:

# 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) 
संबंधित मुद्दे