我正在编写一个小示例程序,我想覆盖默认pyglet的ESC关闭应用程序的行为。我有一些程度:
window = pyglet.window.Window()
@window.event
def on_key_press(symbol, modifiers):
if symbol == pyglet.window.key.ESCAPE:
pass
但这似乎不起作用。
答案 0 :(得分:17)
我知道这个问题很老,但为了以防万一。您必须返回pyglet.event.EVENT_HANDLED以防止默认行为。我没有测试它,但理论上这应该有效:
@window.event
def on_key_press(symbol, modifiers):
if symbol == pyglet.window.key.ESCAPE:
return pyglet.event.EVENT_HANDLED
答案 1 :(得分:4)
对我而言。问题是陈旧的,但我发现你应该使用窗口处理程序机制,从而使当前事件不再传播。
您可以阻止剩余的事件 处理器在堆栈中接收 该事件通过返回一个真值。 以下事件处理程序,何时 推到窗户上,会阻止 退出密钥退出 程序:
def on_key_press(symbol, modifiers):
if symbol == key.ESCAPE:
return True
window.push_handlers(on_key_press)
这是link
答案 2 :(得分:1)
在pyglet-users的Google论坛上,建议可以重载window.Window.on_key_press(),尽管没有代码示例。
答案 3 :(得分: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