私は小さなサンプルプログラムを書いていますが、アプリを閉じるESCのデフォルトのピグレットの動作をオーバーライドしたいと思います。私は次の程度の何かを持っています:
window = pyglet.window.Window()
@window.event
def on_key_press(symbol, modifiers):
if symbol == pyglet.window.key.ESCAPE:
pass
しかし、それはうまくいかないようです。
私は小さなサンプルプログラムを書いていますが、アプリを閉じるESCのデフォルトのピグレットの動作をオーバーライドしたいと思います。私は次の程度の何かを持っています:
window = pyglet.window.Window()
@window.event
def on_key_press(symbol, modifiers):
if symbol == pyglet.window.key.ESCAPE:
pass
しかし、それはうまくいかないようです。
質問が古いことは知っていますが、念のためです。デフォルトの動作を防ぐには、pyglet.event.EVENT_HANDLEDを返す必要があります。私はそれをテストしませんでしたが、理論的にはこれはうまくいくはずです:
@window.event
def on_key_press(symbol, modifiers):
if symbol == pyglet.window.key.ESCAPE:
return pyglet.event.EVENT_HANDLED
わたしも。質問は古いですが、ウィンドウハンドラメカニズムを使用して、現在のイベントがそれ以上伝播しないようにする必要があることがわかりました。
真の値を返すことにより、スタック内の残りのイベントハンドラーがイベントを受信しないようにすることができます。次のイベントハンドラーは、ウィンドウにプッシュされると、エスケープキーがプログラムを終了するのを防ぎます。
def on_key_press(symbol, modifiers):
if symbol == key.ESCAPE:
return True
window.push_handlers(on_key_press)
これがそのリンクです
pyglet-usersのGoogleグループでは、コード例はありませんが、window.Window.on_key_press()をオーバーロードする可能性があることが示唆されています。
これは実際には単純で、次のように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