16

wxPython インターフェイスを使用して、Python でシミュレーションを実行するためのプログラムを作成しています。プログラムでは、シミュレーションを作成することができ、プログラムはそれをレンダリング (=計算) します。レンダリングには非常に時間がかかる場合があります。

ユーザーがシミュレーションを開始し、初期状態を定義するとき、ユーザーがプログラムでさまざまなことを行っている間、プログラムがバックグラウンドでシミュレーションを継続的にレンダリングするようにします。いっぱいになる YouTube スタイルのバーのようなもの: レンダリングされたポイントまでしかシミュレーションを再生できません。

レンダリング機能はどのように実行すればよいですか?

4

4 に答える 4

10

threading.Threadバックグラウンドでコードを実行wx.CallAfterし、ウィンドウ スレッドに更新をポストしてユーザーにレンダリングするためにa を使用します。

thread = threading.Thread(target=self.do_work)
thread.setDaemon(True)
thread.start()

...

def do_work(self):
    # processing code here
    while processing:
        # do stuff
        wx.CallAfter(self.update_view, args, kwargs)

def update_view(self, args):
    # do stuff with args
    # since wx.CallAfter was used, it's safe to do GUI stuff here
于 2009-04-14T02:36:37.927 に答える
7

wxPython wiki には、長時間実行されるタスクに関する有用な情報がかなりあります。それらは基本的にスレッドを使用し、スレッドとwx.PostEventメインの wx イベントループの間の通信を処理します。

于 2009-04-16T12:10:02.987 に答える
0

わずかに異なるアプローチを使用してもかまわない場合は、スタックレス python を見てレンダリング プロセス用のタスクレットを作成できます。個人的にはとても使いやすいと思います。

于 2009-04-14T02:42:19.413 に答える