#python #pyglet
#python #pyglet
Вопрос:
Я создавал простой код в 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()
прямоугольник напечатан.
Поскольку 2-й код не является стандартным методом рисования фигуры в pyglet, я хотел бы знать, есть ли что-то неправильное в этом (проблемы с производительностью, сбои и т. Д.)
Если 2-й код неверен, что мне делать вместо этого?
Ответ №1:
Событие перерисовки on_draw()
, а не draw_
:
@window.event
def on_draw():
rect.draw()
Если вы не используете декоратор, обработчик событий по умолчанию полностью заменяется:
def on_draw():
rect.draw()
Когда вы используете оформление, добавляется дополнительный обработчик событий. Поэтому сохраняется обработчик по умолчанию:
@window.event
def on_draw():
rect.draw()
См. PyGlet — Настройка обработчиков событий
[…] Самый простой способ — напрямую прикрепить обработчик события к соответствующему атрибуту объекта. Это полностью заменит обработчик событий по умолчанию. […]
[…] Если вы не хотите заменять обработчик событий по умолчанию, а вместо этого хотите добавить дополнительный, pyglet предоставляет ярлык с использованием декоратора событий. Будет запущен ваш пользовательский обработчик событий, за которым последует обработчик событий по умолчанию. […]