私は自分のプログラム全体に散在するイベントを持っています。データベースにコミットされた変更を行うたびに、任意の情報を含むModelChangedイベントを起動し、さまざまなGUI要素で取り上げて画面を更新します。しかし、私はこれがどのように機能しているかについて少しリファクタリングしています。 GUI要素が起動するとすぐにイベントをキャプチャする代わりに、別のイベントが発生するまでイベントを一時停止したいと考えています。だから、代わりにこのことを:イベントをキューに入れる前にイベントをキューに入れる方法
火災イベントを - >バインディングは、私はそれがこれをしたいイベント
を受け取る:
火災イベント - >火災に別の独立したイベントが発生するのを待つ - >バインディングは、元のイベントを受け取ります。コンソールに出力
import wxversion
wxversion.select(['3.0', '2.8'])
import wx
import wx.lib.newevent
OriginalEvent, ORIGINAL_EVT = wx.lib.newevent.NewEvent()
ReleaseEvent, RELEASE_EVT = wx.lib.newevent.NewEvent()
class MyFrame(wx.Frame):
def __init__(self, parent, title):
wx.Frame.__init__(self, parent, title=title, size=(200,100))
self.sizer = wx.BoxSizer(wx.VERTICAL)
self.fireOriginalBtn = wx.Button(self, wx.ID_ANY, "Fire Event")
self.fireOriginalBtn.Bind(wx.EVT_BUTTON, self.fireOriginal)
self.releaseEventBtn = wx.Button(self, wx.ID_ANY, "Release Event")
self.releaseEventBtn.Bind(wx.EVT_BUTTON, self.releaseEvent)
self.sizer.Add(self.fireOriginalBtn, 1, wx.EXPAND)
self.sizer.Add(self.releaseEventBtn, 1, wx.EXPAND)
self.SetSizer(self.sizer)
self.SetAutoLayout(1)
self.sizer.Fit(self)
self.Bind(ORIGINAL_EVT, self.captureOriginal)
self.Bind(RELEASE_EVT, self.captureRelease)
self.Show(True)
def fireOriginal(self, evt):
wx.PostEvent(self, OriginalEvent(myInfo=[1,2,3,4]))
def releaseEvent(self, evt):
wx.PostEvent(self, ReleaseEvent())
def captureOriginal(self, evt):
print "Event captured"
def captureRelease(self, evt):
print "Release captured"
app = wx.App(False)
frame = MyFrame(None, 'Small editor')
app.MainLoop()
現在、あなたは火のイベントをクリックすると、あなたが買ってあげるテキスト:ここ
はいくつかのコードです。私は "Fire Event"ボタンをクリックすることができますが、フレームが元のイベントを取得してコンソールに表示される前に "Release Event"ボタンをクリックするまで待つ必要があります。自分のイベントクラスを書く方法については十分にわかりません。イベントを出すかどうかを指定するためにオーバーライドできるものがあります。助言がありますか?
ありがとうございます!
これは、代わりに 'wx.EVT_IDLE'を使用できるものですか? – otterb
いいえ、実際はありません - https://wxpython.org/docs/api/wx.IdleEvent-class.html –