10

私は小さなサンプルプログラムを書いていますが、アプリを閉じるESCのデフォルトのピグレットの動作をオーバーライドしたいと思います。私は次の程度の何かを持っています:

window = pyglet.window.Window()
@window.event
def on_key_press(symbol, modifiers):
    if symbol == pyglet.window.key.ESCAPE:
        pass

しかし、それはうまくいかないようです。

4

4 に答える 4

24

質問が古いことは知っていますが、念のためです。デフォルトの動作を防ぐには、pyglet.event.EVENT_HANDLEDを返す必要があります。私はそれをテストしませんでしたが、理論的にはこれはうまくいくはずです:

@window.event
def on_key_press(symbol, modifiers):
    if symbol == pyglet.window.key.ESCAPE:
        return pyglet.event.EVENT_HANDLED
于 2010-07-08T15:42:50.320 に答える
4

わたしも。質問は古いですが、ウィンドウハンドラメカニズムを使用して、現在のイベントがそれ以上伝播しないようにする必要があることがわかりました。

真の値を返すことにより、スタック内の残りのイベントハンドラーがイベントを受信しないようにすることができます。次のイベントハンドラーは、ウィンドウにプッシュされると、エスケープキーがプログラムを終了するのを防ぎます。

def on_key_press(symbol, modifiers):
    if symbol == key.ESCAPE:
        return True

window.push_handlers(on_key_press)

これがそのリンクです

于 2010-10-14T14:39:21.740 に答える
1

pyglet-usersのGoogleグループでは、コード例はありませんが、window.Window.on_key_press()をオーバーロードする可能性があることが示唆されています。

于 2010-03-23T13:07:48.607 に答える
1

これは実際には単純で、次のようにWindowをサブクラス化し、on_key_pressをオーバーライドします。

class MyWindow(pyglet.window.Window):  
    def on_key_press(self, symbol, modifiers):  
        if symbol == key.ESCAPE:  
            return pyglet.event.EVENT_HANDLED  
于 2012-12-08T20:41:35.843 に答える