Pyglet 主循环在哪里?
Where's Pyglet mainloop?
考虑以下示例:
import pyglet
def foo():
print("I'm in a loop...")
def main():
w = pyglet.window.Window()
@w.event
def on_draw():
foo()
pyglet.app.run()
return 0
if __name__ == '__main__':
main()
我真的 期待 on_draw() 会在内部主循环中绘制东西,但是...
骗我,只执行一次代码。 哪里是Pyglet真正的主循环?这样我就可以真正更新那里的东西而不是只画一次(这是没用的)。
我猜你正在寻找类似 GLUT's main loop. I actually never used pyglet
before but in this tutorial 的东西,它基本上使用:
pyglet.clock.schedule_interval(update, 1/120.0)
因此,您可以执行以下操作:
import pyglet
def foo(value):
print("I'm in a loop...")
def main():
w = pyglet.window.Window()
@w.event
def on_draw():
foo(None)
pyglet.clock.schedule_interval(foo, 1.0)
pyglet.app.run()
main()
同样,我不是该领域的专家。可能有更好的方法。
EventLoop class 包含 运行 方法 (pyglet.app.run),基本上就是 'main loop'。它管理计划的事件,让进程休眠,并管理来自 OS 的事件。通过检查源代码,您可以了解它是如何工作的。您可以在 pyglet/app/base.py.
中找到它
为了阐明为什么您的代码片段没有按预期工作,只有当 pyglet 已执行预定事件或已被 OS 明确标记为无效时,pyglet 才会 on_draw 事件;逻辑是,如果没有触发会改变屏幕的事件,为什么要绘制屏幕?如果您尝试安排在应用程序循环的每次迭代中调用的事件,请使用 pyglet.clock.schedule.
https://pyglet.readthedocs.io/en/latest/programming_guide/eventloop.html
https://pyglet.readthedocs.io/en/latest/modules/clock.html#scheduling
考虑以下示例:
import pyglet
def foo():
print("I'm in a loop...")
def main():
w = pyglet.window.Window()
@w.event
def on_draw():
foo()
pyglet.app.run()
return 0
if __name__ == '__main__':
main()
我真的 期待 on_draw() 会在内部主循环中绘制东西,但是...
骗我,只执行一次代码。 哪里是Pyglet真正的主循环?这样我就可以真正更新那里的东西而不是只画一次(这是没用的)。
我猜你正在寻找类似 GLUT's main loop. I actually never used pyglet
before but in this tutorial 的东西,它基本上使用:
pyglet.clock.schedule_interval(update, 1/120.0)
因此,您可以执行以下操作:
import pyglet
def foo(value):
print("I'm in a loop...")
def main():
w = pyglet.window.Window()
@w.event
def on_draw():
foo(None)
pyglet.clock.schedule_interval(foo, 1.0)
pyglet.app.run()
main()
同样,我不是该领域的专家。可能有更好的方法。
EventLoop class 包含 运行 方法 (pyglet.app.run),基本上就是 'main loop'。它管理计划的事件,让进程休眠,并管理来自 OS 的事件。通过检查源代码,您可以了解它是如何工作的。您可以在 pyglet/app/base.py.
中找到它为了阐明为什么您的代码片段没有按预期工作,只有当 pyglet 已执行预定事件或已被 OS 明确标记为无效时,pyglet 才会 on_draw 事件;逻辑是,如果没有触发会改变屏幕的事件,为什么要绘制屏幕?如果您尝试安排在应用程序循环的每次迭代中调用的事件,请使用 pyglet.clock.schedule.
https://pyglet.readthedocs.io/en/latest/programming_guide/eventloop.html
https://pyglet.readthedocs.io/en/latest/modules/clock.html#scheduling