2008年5月1日木曜日

CallAfterとYield

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
積み残しだったYieldとCallAfterの調査。EventとしてPostされてますね。ということはYieldの中で処理されてしまいうるので、CallAfterで実行するメソッドがDlg::Destroyを呼ぶと落ちますね。これですっきり。気持ちよくねられます。
wxPython/src/_core_ex.py

def CallAfter(callable, *args, **kw):
"""
Call the specified function after the current and pending event
handlers have been completed. This is also good for making GUI
method calls from non-GUI threads. Any extra positional or
keyword args are passed on to the callable when it is called.

:see: `wx.CallLater`
"""
app = wx.GetApp()
assert app is not None, 'No wx.App created yet'

if not hasattr(app, "_CallAfterId"):
app._CallAfterId = wx.NewEventType()
app.Connect(-1, -1, app._CallAfterId,
lambda event: event.callable(*event.args, **event.kw) )
evt = wx.PyEvent()
evt.SetEventType(app._CallAfterId)
evt.callable = callable
evt.args = args
evt.kw = kw
wx.PostEvent(app, evt)

0 件のコメント: