在pyglet文档中,我发现:
以下示例说明如何操作 抓住你的应用程序的截图 窗口:
pyglet.image.get_buffer_manager().get_color_buffer().save('screenshot.png')
然而,当使用它时,一切都会停止,直到我点击鼠标。有另一种方法可以在Pyglet中获取屏幕内容,还是强制它回到事件循环中?
编辑:我发现实际上有一个短暂的延迟(0.2秒〜),但没有别的。实际上它与停止pyglet的F10键有关。 > _>
我无法关闭或删除,因为有开放的赏金。
答案 0 :(得分:8)
好的,这是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(...)
。
答案 1 :(得分:1)
如果您碰巧在Windows平台上,可以使用PIL创建屏幕截图:http://effbot.org/imagingbook/imagegrab.htm
(PIL是跨平台的,除了那个特定的方法。)
至于pyglet的方法,你可以发布一些更多的源代码吗?这会破坏事件循环似乎很奇怪。如果确实如此,也许你可以在一个线程中包装那个单个方法调用吗?