1

最近、pyglet-usersグループでこの質問をしましたが、応答があったので、代わりにここで試しています。

Pygletを拡張して、lircでサポートされている赤外線入力デバイスを使用できるようにしたいと思います。以前にPyGameでpyLirc(http://pylirc.mccabe.nu/)を使用しましたが、代わりにPygletを使用するようにアプリケーションを書き直したいと思います。

ボタンが押されたかどうかを確認するには、通常、pyLircをポーリングして、キューにボタンが押されたかどうかを確認します。

私の質問は、pyLircを統合するためのPygletの正しい方法は何ですか?

現在のウィンドウキーボード/マウスイベントと同じように機能するかどうかを確認したいのですが、どこから始めればよいかわかりません。

新しいEventDispatcherを作成できることはわかっています。この場合、新しいタイプのイベントを登録し、ポーリング後に次のようにディスパッチできます。

class pyLircDispatcher(pyglet.event.EventDispatcher):
    def poll(self):
        codes = pylirc.nextcode()
        if codes is not None:
            for code in codes:
                self.dispatch_event('on_irbutton', code)

    def on_irbutton(self, code):
        pass

しかし、pyglet.app.run()を使用する場合、それをアプリケーションのメインループに統合してpoll()を呼び出し続けるにはどうすればよいですか?また、このeventdispatcherをウィンドウにアタッチして、マウスやキーボードのディスパッチャーと同じように機能させるにはどうすればよいですか?

pyglet.clock.schedule_intervalを使用して定期的にpoll()を呼び出すようにスケジューラーを設定できることがわかりましたが、これは正しい方法ですか?

4

2 に答える 2

1

正しい方法は、うまくいくものです。より良い方法が見つかった場合は、後でいつでも変更できます。

于 2009-08-07T03:23:08.537 に答える
1

OPにはおそらく遅すぎますが、他の人に役立つ場合はとにかく返信します.

イベント ディスパッチャーを作成し、pyglet.clock.schedule_interval を使用して一定の間隔で poll() を呼び出すのが良い方法です。

イベント ディスパッチャーをウィンドウにアタッチするには、ディスパッチャーのインスタンスを作成してから、そのpush_handlersメソッドを呼び出す必要があります。

dispatcher.push_handlers(window)

その後、ウィンドウに入ってくる他のイベントと同じようにイベントを扱うことができます。

于 2009-08-11T20:18:55.620 に答える