Пиглет, как сделать так, чтобы клавиша ESCAPE не закрывала окно?

Я пишу небольшой пример программы, и я хотел бы переопределить поведение pyglet по умолчанию, когда ESC закрывает приложение. У меня есть что-то вроде:

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

но это, похоже, не работает.


person Bartosz Radaczyński    schedule 22.03.2010    source источник


Ответы (4)


В группе Google для pyglet-users предлагается перегрузить окно. Window.on_key_press(), хотя для него нет примера кода.

person Alastair Montgomery    schedule 23.03.2010

Я знаю, что вопрос старый, но на всякий случай. Вы должны вернуть pyglet.event.EVENT_HANDLED, чтобы предотвратить поведение по умолчанию. Я не проверял, но по идее должно работать:

@window.event
def on_key_press(symbol, modifiers):
    if symbol == pyglet.window.key.ESCAPE:
        return pyglet.event.EVENT_HANDLED
person Imbrondir    schedule 08.07.2010
comment
Это должен быть принятый ответ, потому что он действительно отвечает на вопрос. - person Ryan Goldstein; 12.06.2015

Мне то же самое. Вопрос старый, но я обнаружил, что вы должны использовать механизмы обработчиков окон, чтобы текущее событие не распространялось дальше.

Вы можете предотвратить получение события оставшимися обработчиками событий в стеке, вернув истинное значение. Следующий обработчик событий при нажатии на окно предотвратит выход из программы с помощью управляющей клавиши:

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

window.push_handlers(on_key_press)

Вот эта ссылка

person varnie    schedule 14.10.2010

На самом деле это просто, создайте подкласс 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  
person Uchiha Madara    schedule 08.12.2012