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() 法用户必须为每个窗口自行安排此操作(或称其为按需)。这允许为每个窗口设置自定义帧速率,或在运行时期间更改帧速率(请参阅文档中的示例)。

返回类型:

None

此方法在以下情况下返回 has_exit 设置为True。IE:什么时候 exit() 被称为。

不鼓励开发人员推翻 run 方法,因为该实现是特定于平台的。

exit() None

在当前迭代结束时安全退出事件循环。

此方法是线程安全的等效设置 has_exitTrue 。所有等待的线程都将被中断(请参见 sleep() )。

返回类型:

None

sleep(timeout: float) bool

等待一段时间。

等待直到 has_exit 标志已设置或 exit() 被称为。

此方法是线程安全的。

参数:

timeout (float) -- 睡觉时间,以秒为单位。

返回类型:

bool

Added in version 1.2.

事件

on_enter() None

事件循环即将开始。

这是在事件循环准备进入主运行循环时调度的,表示应用程序进行自身初始化的最后机会。

返回类型:

None

on_exit() None

事件循环即将退出。

调度此事件后, run() 方法返回(如果有更多代码跟在 run() 调用)。

返回类型:

None

on_window_close(window: Window) None

一扇窗户被关上了。

在关闭窗口时调度此事件。如果按下了窗口的关闭按钮但窗口没有关闭,则不会被调度。

默认处理程序调用 exit() 如果没有更多的窗户打开。您可以重写此处理程序以使您的应用程序退出基于其他策略。

返回类型:

None

属性

has_exit

指示事件循环是否将在下一次迭代中退出的标志。

设置后,所有等待线程都会中断。

:see sleep()

从pyglet1.2开始线程安全。

方法(内部)

enter_blocking() None

当操作系统因用户交互而即将阻塞时,由pyglet内部进程调用。

例如,当用户开始卸载或移动窗口时,这种情况很常见。

该方法为事件循环提供了在平台事件循环上设置OS定时器的机会,该定时器将在阻塞操作期间继续被调用。

The default implementation ensures that idle() continues to be called as documented. :rtype: None

Added in version 1.2.

static exit_blocking() None

当阻止操作完成时,由pyglet内部进程调用。

看见:

enter_blocking()

返回类型:

None

idle() None | float

在事件循环的每次迭代期间调用。

该方法在任何窗口事件之后立即调用(即,在任何用户输入之后)。该方法可以返回一个持续时间,在该持续时间之后将再次调用IDLE方法。如果用户创建更多的输入事件,则可以更早地调用该方法。该方法可以返回 None 只等待用户事件。

例如,返回 1.0 每秒调用一次Idle方法,或在任何用户事件之后立即调用。

默认实现将调度 pyglet.window.Window.on_draw() 事件,用于所有窗口和用途 pyglet.clock.tick()pyglet.clock.get_sleep_time() 在默认时钟上确定返回值。

此方法仅应由高级用户覆盖。若要定期执行代码,请使用 pyglet.clock.schedule() 方法:研究方法。

返回类型:

None | float

返回:

应再次调用IDLE方法之前的秒数,或 None 以阻止用户输入。

__init__() None
__new__(**kwargs)
class PlatformEventLoop

抽象类,实现依赖于平台。

Added in version 1.2.

__init__() None
dispatch_posted_events() None

立即调度所有挂起的事件。

通常,这是由运行循环迭代自动调用的。

返回类型:

None

is_running() bool

如果事件循环当前正在处理。

True 如果正在运行,或者 False 如果它被阻止或未激活。

返回类型:

bool

notify() None

通知事件循环有需要处理的内容。

如果事件循环被阻止,它将立即解除阻止并执行迭代。 如果事件循环正在运行,则会计划随后立即执行另一个迭代。

返回类型:

None

post_event(
dispatcher: EventDispatcher,
event: str,
*args: Any,
) None

将事件发布到主应用程序线程中。

该事件在内部排队,直到 run() 方法的线程能够调度该事件。可以从任何线程安全地调用此方法。

如果该方法是从 run() 方法的线程(例如,从事件处理程序中),则可以在相同的运行循环迭代或下一个运行循环迭代中调度事件;选择是不确定的。

返回类型:

None

set_timer(func: Callable, interval: float) None
返回类型:

None

start() None
返回类型:

None

step(timeout: None | float = None) None
返回类型:

None

stop() None
返回类型:

None

功能

run(interval: float = 0.016666666666666666) None

开始处理事件、预定函数和窗口更新。

这是一个便利函数,相当于::

pyglet.app.event_loop.run()
返回类型:

None

exit() None

退出应用程序事件循环。

如果事件循环当前正在运行,则导致应用程序事件循环结束。应用程序不一定退出(例如,在 run 调用)。

这是一个便利函数,相当于::

event_loop.exit()
返回类型:

None

属性

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 在构造时自动添加到此集合中。该集合使用弱引用,因此当窗口不再被引用或显式关闭时,将从集合中删除它们。

例外情况

class AppException
__init__(*args, **kwargs)
__new__(**kwargs)