pyglet.app
应用程序范围的功能。
应用
大多数应用程序只需要调用 run()
在创建一个或多个窗口以开始处理事件之后。例如,一个由一个窗口组成的简单应用程序是:
import pyglet
win = pyglet.window.Window()
pyglet.app.run()
事件
要处理主事件循环上的事件,请手动实例化它。下面的示例在关闭任何窗口后立即退出应用程序(默认策略是等待所有窗口关闭):
event_loop = pyglet.app.EventLoop()
@event_loop.event
def on_window_close(window):
event_loop.exit()
Added in version 1.1.
班级
- class EventLoop
应用程序的主运行循环。
叫唤 run 开始应用程序事件循环,该循环处理操作系统事件、调用
pyglet.clock.tick()
调用计划的函数和调用pyglet.window.Window.on_draw()
和pyglet.window.Window.flip()
更新窗口内容。应用程序可以细分为
EventLoop
并覆盖某些方法以集成另一个框架的运行循环,或以某种其他方式定制处理。一般情况下,您不应重写run()
,因为此方法包含特定于平台的代码,该代码确保应用程序保持对用户的响应,同时将CPU使用率保持在最低水平。方法
- run(interval: None | float = 0.016666666666666666) None
开始处理事件、预定函数和窗口更新。
此方法进入主事件循环,如果
interval
参数没有改变,日程安排调用pyglet.window.Window.draw()
法您可以更改interval
论点以满足您的需求。- 参数:
interval (
None
|float
) -- Windows重绘间隔,以秒为单位(帧速率)。如果interval == 0
,窗口将尽快重新绘制。这可能会使中央处理器核心饱和,因此除非受图形处理器约束,否则不要这样做。如果interval is None
,pyglet不会安排呼叫到pyglet.window.Window.draw()
法用户必须为每个窗口自行安排此操作(或称其为按需)。这允许为每个窗口设置自定义帧速率,或在运行时期间更改帧速率(请参阅文档中的示例)。- 返回类型:
此方法在以下情况下返回
has_exit
设置为True。IE:什么时候exit()
被称为。不鼓励开发人员推翻
run
方法,因为该实现是特定于平台的。
- sleep(timeout: float) bool
等待一段时间。
等待直到
has_exit
标志已设置或exit()
被称为。此方法是线程安全的。
Added in version 1.2.
事件
- on_window_close(window: Window) None
一扇窗户被关上了。
在关闭窗口时调度此事件。如果按下了窗口的关闭按钮但窗口没有关闭,则不会被调度。
默认处理程序调用
exit()
如果没有更多的窗户打开。您可以重写此处理程序以使您的应用程序退出基于其他策略。- 返回类型:
属性
方法(内部)
- enter_blocking() None
当操作系统因用户交互而即将阻塞时,由pyglet内部进程调用。
例如,当用户开始卸载或移动窗口时,这种情况很常见。
该方法为事件循环提供了在平台事件循环上设置OS定时器的机会,该定时器将在阻塞操作期间继续被调用。
The default implementation ensures that
idle()
continues to be called as documented. :rtype:None
Added in version 1.2.
- idle() None | float
在事件循环的每次迭代期间调用。
该方法在任何窗口事件之后立即调用(即,在任何用户输入之后)。该方法可以返回一个持续时间,在该持续时间之后将再次调用IDLE方法。如果用户创建更多的输入事件,则可以更早地调用该方法。该方法可以返回 None 只等待用户事件。
例如,返回
1.0
每秒调用一次Idle方法,或在任何用户事件之后立即调用。默认实现将调度
pyglet.window.Window.on_draw()
事件,用于所有窗口和用途pyglet.clock.tick()
和pyglet.clock.get_sleep_time()
在默认时钟上确定返回值。此方法仅应由高级用户覆盖。若要定期执行代码,请使用
pyglet.clock.schedule()
方法:研究方法。
- __new__(**kwargs)
功能
属性
- event_loop = <pyglet.app.base.EventLoop object>
全局事件循环。应用程序可以将其替换为自己的子类
EventLoop
在呼叫之前EventLoop.run()
。
- platform_event_loop = <pyglet.app.base.PlatformEventLoop object>
抽象类,实现依赖于平台。
Added in version 1.2.
- windows = set()
所有打开的窗口(包括不可见窗口)的集合。实例
pyglet.window.Window
在构造时自动添加到此集合中。该集合使用弱引用,因此当窗口不再被引用或显式关闭时,将从集合中删除它们。