Pyglet,如何让ESCAPE键不关闭窗口?

时间:2010-03-22 20:42:39

标签: pyglet

我正在编写一个小示例程序,我想覆盖默认pyglet的ESC关闭应用程序的行为。我有一些程度:

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

但这似乎不起作用。

4 个答案:

答案 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