使用 Pyglet 的黑色屏幕截图

Black screenshot using Pyglet

我一直在尝试获取使用 Python 的 Pyglet 模块创建的 window 的屏幕截图。我使用这行代码来抓取屏幕截图:

pyglet.image.get_buffer_manager().get_color_buffer().save('screenshot1.png')

虽然我运行程序和创建截图文件时没有出现错误,但文件只是黑色。这是完整的代码:

import pyglet
from pyglet import gl

window = pyglet.window.Window(500, 500)

@window.event
def on_draw():
    window.clear()
    pyglet.graphics.draw(2, pyglet.gl.GL_LINES, ('v2i', (200, 200, 400, 400)))


pyglet.image.get_buffer_manager().get_color_buffer().save('screenshot1.png')

pyglet.app.run()

您在 window 有机会画任何东西之前截图。 因为 on_draw() 事件处理程序仅在您启动 event handling looppyglet.app.run().

一种可能的解决方案是将屏幕截图功能也放入事件处理程序中,例如:

@window.event
def on_key_press(symbol, modifiers):
    pyglet.image.get_buffer_manager().get_color_buffer().save('screenshot1.png')

这样,只有在您按下某个键后才会截取屏幕截图,这样 window 就可以先绘制其内容。