Я делал простой код в pyglet, чтобы нарисовать прямоугольник на экране, но когда я использовал правильный формат кода, ничего не происходит, но и ошибок не возникает.
window=pyglet.window.Window()
rect=pyglet.shapes.Shapes(0,0,50,50,color=(255,255,255))
@window.event
def draw_():
rect.draw()
pyglet.app.run()
этот код просто приводит к черному экрану. Прямоугольник не печатается, но если я вместо этого использую этот код
window=pyglet.window.Window()
rect=pyglet.shapes.Shapes(0,0,50,50,color=(255,255,255))
def draw_():
rect.draw()
pyglet.app.run()
печатается прямоугольник. Поскольку второй код не является стандартным методом рисования фигуры в pyglet, я хотел знать, есть ли что-то не так с этим (проблемы с производительностью, сбои и т. д.). Если второй код неверный, что мне делать вместо этого?






Событие перерисовки — это on_draw(), а не draw_:
@window.event
def on_draw():
rect.draw()
Если вы не используете декоратор, обработчик событий по умолчанию полностью заменяется:
def on_draw(): rect.draw()
При использовании украшения добавляется дополнительный обработчик событий. Поэтому обработчик по умолчанию сохраняется:
@window.event def on_draw(): rect.draw()
См. PyGlet — Настройка обработчиков событий
[...] Самый простой способ - напрямую прикрепить обработчик события к соответствующему атрибуту объекта. Это полностью заменит обработчик событий по умолчанию. [...]
[...] Если вы не хотите заменять обработчик событий по умолчанию, а вместо этого хотите добавить дополнительный, pyglet предоставляет ярлык с помощью декоратора событий. Будет запущен ваш пользовательский обработчик событий, а затем обработчик событий по умолчанию. [...]