我正在编写一个小示例程序,我想覆盖 ESC 关闭应用程序的默认 pyglet 行为。我有一些东西:
window = pyglet.window.Window()
@window.event
def on_key_press(symbol, modifiers):
if symbol == pyglet.window.key.ESCAPE:
pass
但这似乎不起作用。
我正在编写一个小示例程序,我想覆盖 ESC 关闭应用程序的默认 pyglet 行为。我有一些东西:
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