使用Pyglet截图[修复]

The*_*uck 7 python events screenshot pyglet

在pyglet文档中,我发现:

以下示例显示如何获取应用程序窗口的屏幕截图: pyglet.image.get_buffer_manager().get_color_buffer().save('screenshot.png')

但是当使用它时,一切都会停止,直到我点击鼠标.是否有另一种方法来获取Pyglet中的屏幕内容,或强制它回到事件循环?

编辑:我发现实际上有一个短暂的延迟(0.2秒〜),但没有别的.实际上它与停止pyglet的F10键有关.> _>

我无法关闭或删除,因为有开放的赏金.

tan*_*orm 9

好的,这是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()
Run Code Online (Sandbox Code Playgroud)

截屏不会停止事件循环.pyglet中的事件循环只是懒惰,并尝试尽可能少地工作.如果您希望事情继续发生,您需要安排一个重复运行的函数.否则,它将等待发生附加侦听器的事件.(您的代码必须正在侦听鼠标事件,这就是当您单击鼠标时它恢复工作的原因.)

简短的回答,我怀疑你需要修复pyglet.clock.schedule_interval(...).