さて、これは pyglet での完全な動作例です。ウィンドウの周りをランダムに歩き回るテキスト「hello world」が表示され、キーを押すたびにスクリーンショットがダンプされます (投稿したコードとまったく同じ行を使用)。
import pyglet, random
window = pyglet.window.Window()
label = pyglet.text.Label('Hello, world',
font_name='Times New Roman',
font_size=36,
x=window.width//2, y=window.height//2,
anchor_x='center', anchor_y='center')
@window.event
def on_draw():
window.clear()
label.draw()
@window.event
def on_key_press(symbol, modifiers):
pyglet.image.get_buffer_manager().get_color_buffer().save('screenshot.png')
def update(dt):
label.x += random.randint(-10, 10)
label.y += random.randint(-10, 10)
pyglet.clock.schedule_interval(update, 0.1)
pyglet.app.run()
スクリーンショットを撮っても、イベント ループは停止しません。pyglet のイベント ループは単に怠け者であり、できる限り少ない作業を実行しようとします。物事が自然に起こり続けるようにしたい場合は、関数を繰り返し実行するようにスケジュールする必要があります。それ以外の場合は、リスナーがアタッチされているイベントが発生するのを待ちます。(コードはマウス イベントをリッスンしている必要があります。これが、マウスをクリックすると動作を再開する理由です。)
簡単な答えですが、必要な修正はpyglet.clock.schedule_interval(...)
.