ページ

2009年6月11日

wxWidgetsでTwisted

Twistedという非同期IOフレームワークは恐ろしいことにselect/pollだけじゃなくって、Window sのイベントループで処理したり、それ以外のGUIのフレームワークのイベントモデルを使ったりできます。簡単に言うとGUIとの親和性が高いフレームワークです。でも、実際にWindowsのイベントルールを使ったことはありましたが、wxWidgetsを初めて使いました。どきどき。

コード自体は単純で、

from wx import wx
from twisted.internet import wxreactor
wxreactor.install()
from twisted.internet import reactor

class MyApp(wx.App):
いろいろ

app = MyApp(0)
reactor.registerWxApp(app)
reactor.run()

見たいで動きます。wx.MainLoop()は使わないんですね。さて、これで、メニューの終了とかでアプリケーションを終了させるためにFrame.Close()を呼んでもreactor.stop()を呼んでも終わってくれません。遠い彼方の記憶によると、wxのreactorはこっそり別のスレッドで動いているとかだったような気もしたので、reactor.callLater(0, reactor.stop)として、コールバックを登録してそのコールバックの中でreactorを止めるようにしたらちゃんと動き増した。なるほどです。

0 件のコメント: