pygame.event
pygame module for interacting with events and queues
internally process pygame event handlers
get events from the queue
get a single event from the queue
wait for a single event from the queue
test if event types are waiting on the queue
remove all events from the queue
get the string name from an event id
control which events are allowed on the queue
control which events are allowed on the queue
test if a type of event is blocked from the queue
control the sharing of input devices with other applications
test if the program is sharing input devices
place a new event on the queue
make custom user event type
pygame object for representing events

PYGAME通过事件队列处理其所有的事件消息。本模块中的例程可帮助您管理该事件队列。输入队列严重依赖于 pygame.displaypygame module to control the display window and screen 模块。如果显示器尚未初始化且未设置视频模式,则事件队列可能无法正常工作。

事件队列对其可以容纳的事件数有上限。当队列变满时,新事件被悄悄丢弃。为了防止丢失事件,特别是发出退出命令信号的输入事件,程序必须每帧处理事件(使用 pygame.event.get()pygame.event.pump()pygame.event.wait()pygame.event.peek()pygame.event.clear() )并对其进行处理。不处理事件可能会导致您的系统确定程序已锁定。要加快队列处理速度,请使用 pygame.event.set_blocked()control which events are allowed on the queue 以限制要排队的事件。

要获取各种输入设备的状态,您可以跳过事件队列,直接访问带有相应模块的输入设备: pygame.mousepygame module to work with the mousepygame.keypygame module to work with the keyboard ,以及 pygame.joystickPygame module for interacting with joysticks, gamepads, and trackballs. 。如果您使用这种方法,请记住,pyGame需要与系统窗口管理器和平台的其他部分进行某种形式的通信。要使pyGame与系统保持同步,您需要调用 pygame.event.pump()internally process pygame event handlers 让一切保持最新。通常,这应该在每个游戏循环中调用一次。注意:在设备初始化之前,操纵杆不会发送任何事件。

事件队列包含 pygame.event.Eventpygame object for representing events 事件对象。有多种方法可以访问排队的事件,从简单地检查事件的存在,到直接从堆栈中获取它们。事件队列还提供了一些简单的筛选,通过阻止队列中的某些事件类型可以略微提高性能。使用 pygame.event.set_allowed()control which events are allowed on the queuepygame.event.set_blocked()control which events are allowed on the queue 若要更改此筛选,请执行以下操作。默认情况下,所有事件类型都可以放在队列中。

pygame.event.Eventpygame object for representing events 实例包含特定于该事件类型的事件类型标识符和属性。事件类型标识符可作为 pygame.event.Event.typeevent type identifier. 财产。任何特定于事件的属性都可以通过 pygame.event.Event.__dict__event attribute dictionary 属性或直接作为事件对象的属性(因为成员查找被传递到对象的字典值)。该事件对象没有方法函数。用户可以使用创建自己的新事件 pygame.event.Event()pygame object for representing events 功能。

事件类型标识符介于 NOEVENTNUMEVENTS 。用户定义的事件的值应在以下范围内 USEREVENTNUMEVENTS - 1 。用户定义的事件可以通过以下方式获取自定义事件编号 pygame.event.custom_type()make custom user event type 。建议所有用户事件遵循此系统。

事件支持平等和不平等的比较。如果两个事件属于相同类型且具有相同的属性值,则它们是相等的。

在调试和试验时,可以打印事件对象以快速显示其类型和成员。功能 pygame.event.event_name()get the string name from an event id 可用于获取表示事件类型名称的字符串。

来自系统的事件将具有基于类型的一组有保证的成员属性。以下是事件类型及其特定属性的列表。

QUIT              none
ACTIVEEVENT       gain, state
KEYDOWN           key, mod, unicode, scancode
KEYUP             key, mod, unicode, scancode
MOUSEMOTION       pos, rel, buttons, touch
MOUSEBUTTONUP     pos, button, touch
MOUSEBUTTONDOWN   pos, button, touch
JOYAXISMOTION     joy (deprecated), instance_id, axis, value
JOYBALLMOTION     joy (deprecated), instance_id, ball, rel
JOYHATMOTION      joy (deprecated), instance_id, hat, value
JOYBUTTONUP       joy (deprecated), instance_id, button
JOYBUTTONDOWN     joy (deprecated), instance_id, button
VIDEORESIZE       size, w, h
VIDEOEXPOSE       none
USEREVENT         code

Changed in pygame 2.0.0: 这个 joy 属性已弃用, instance_id 已添加。

Changed in pygame 2.0.1: 这个 unicode 属性已添加到 KEYUP eve NT。

请注意, ACTIVEEVENTVIDEORESIZEVIDEOEXPOSE 都被认为是“遗留”事件,使用Pigame2 WINDOWEVENT 推荐使用API,而不是使用此较旧的API。

您还可以找到键盘键的常量列表 here


当使用SDL2编译时,pyGame具有这些额外的事件及其属性。

AUDIODEVICEADDED   which, iscapture (SDL backend >= 2.0.4)
AUDIODEVICEREMOVED which, iscapture (SDL backend >= 2.0.4)
FINGERMOTION       touch_id, finger_id, x, y, dx, dy
FINGERDOWN         touch_id, finger_id, x, y, dx, dy
FINGERUP           touch_id, finger_id, x, y, dx, dy
MOUSEWHEEL         which, flipped, x, y, touch, precise_x, precise_y
MULTIGESTURE       touch_id, x, y, pinched, rotated, num_fingers
TEXTEDITING        text, start, length
TEXTINPUT          text

New in pygame 1.9.5.

Changed in pygame 2.0.2: 固定数量的水平滚动(x,向右为正,向左为负)。

Changed in pygame 2.0.2: 这个 touch 属性已添加到所有 MOUSE 事件。

这个 touch 的属性 MOUSE 事件指示事件是否由触摸输入设备生成,而不是由真正的鼠标生成。如果您的应用程序已处理此类事件,则可能需要忽略这些事件 FINGERMOTIONFINGERDOWNFINGERUP 事件。

New in pygame 2.1.3: 已添加 precise_xprecise_yMOUSEWHEEL 活动


PYGAME 2中引入了许多新的事件。

PYGAME可以识别窗口中放置的文本或文件。如果文件被丢弃, DROPFILE 事件将被发送, file 将是它的道路。这个 DROPTEXT 事件仅在X11上支持。

MIDIINMIDIOUT 活动是否预留给 pygame.midipygame module for interacting with midi input and output. 使用。

PyGame 2还支持控制器热插拔

Event name               Attributes and notes

DROPFILE                 file
DROPBEGIN                (SDL backend >= 2.0.5)
DROPCOMPLETE             (SDL backend >= 2.0.5)
DROPTEXT                 text (SDL backend >= 2.0.5)
MIDIIN
MIDIOUT
CONTROLLERDEVICEADDED    device_index
JOYDEVICEADDED           device_index
CONTROLLERDEVICEREMOVED  instance_id
JOYDEVICEREMOVED         instance_id
CONTROLLERDEVICEREMAPPED instance_id
KEYMAPCHANGED            (SDL backend >= 2.0.4)
CLIPBOARDUPDATE
RENDER_TARGETS_RESET     (SDL backend >= 2.0.2)
RENDER_DEVICE_RESET      (SDL backend >= 2.0.4)
LOCALECHANGED            (SDL backend >= 2.0.14)

同样在这个版本中, instance_id 属性被添加到操纵杆事件,并且 joy 属性已弃用。

KEYMAPCHANGED 是当键盘映射因系统事件(如输入语言或键盘布局更改)而更改时发送的一种事件。

CLIPBOARDUPDATE 剪贴板更改时发送的事件。这仍然可以被认为是一个实验性的功能,某些类型的剪贴板更改可能不会触发此事件。

LOCALECHANGED 是在用户区域设置更改时发送的事件

New in pygame 2.0.0.

New in pygame 2.1.3: KEYMAPCHANGED, CLIPBOARDUPDATE, RENDER_TARGETS_RESET, RENDER_DEVICE_RESET and LOCALECHANGED


从PYGAME 2.0.1开始,有一组新的事件,称为窗口事件。以下是所有窗口事件的列表,以及简短说明

Event type                Short description

WINDOWSHOWN            Window became shown
WINDOWHIDDEN           Window became hidden
WINDOWEXPOSED          Window got updated by some external event
WINDOWMOVED            Window got moved
WINDOWRESIZED          Window got resized
WINDOWSIZECHANGED      Window changed its size
WINDOWMINIMIZED        Window was minimized
WINDOWMAXIMIZED        Window was maximized
WINDOWRESTORED         Window was restored
WINDOWENTER            Mouse entered the window
WINDOWLEAVE            Mouse left the window
WINDOWFOCUSGAINED      Window gained focus
WINDOWFOCUSLOST        Window lost focus
WINDOWCLOSE            Window was closed
WINDOWTAKEFOCUS        Window was offered focus (SDL backend >= 2.0.5)
WINDOWHITTEST          Window has a special hit test (SDL backend >= 2.0.5)
WINDOWICCPROFCHANGED   Window ICC profile changed (SDL backend >= 2.0.18)
WINDOWDISPLAYCHANGED   Window moved on a new display (SDL backend >= 2.0.18)

WINDOWMOVEDWINDOWRESIZEDWINDOWSIZECHANGEDxy 属性、 WINDOWDISPLAYCHANGED 有一个 display_index 属性。所有窗口事件都有一个 window 属性。

New in pygame 2.0.1.

New in pygame 2.1.3: WINDOWICCPROFCHANGED and WINDOWDISPLAYCHANGED


在Android上,可以生成以下事件

Event type                 Short description

APP_TERMINATING           OS is terminating the application
APP_LOWMEMORY             OS is low on memory, try to free memory if possible
APP_WILLENTERBACKGROUND   Application is entering background
APP_DIDENTERBACKGROUND    Application entered background
APP_WILLENTERFOREGROUND   Application is entering foreground
APP_DIDENTERFOREGROUND    Application entered foreground

New in pygame 2.1.3.


pygame.event.pump()
internally process pygame event handlers
pump() -> None

对于游戏的每一帧,您将需要对事件队列进行某种调用。这确保了您的程序可以与操作系统的其余部分进行内部交互。如果在游戏中未使用其他事件函数,则应调用 pygame.event.pump() 以允许pyGame处理内部操作。

如果您的程序一直通过另一个处理队列上的事件,则此函数不是必需的 pygame.eventpygame module for interacting with events and queues 功能。

在事件队列中有一些重要的事情必须在内部处理。主窗口可能需要重新绘制或响应系统。如果调用事件队列的时间太长,系统可能会判定您的程序已锁定。

小心

此函数只能在初始化的线程中调用 pygame.displaypygame module to control the display window and screen

pygame.event.get()
get events from the queue
get(eventtype=None) -> Eventlist
get(eventtype=None, pump=True) -> Eventlist
get(eventtype=None, pump=True, exclude=None) -> Eventlist

这将获取所有消息并将其从队列中删除。如果给定了类型或类型序列,则只会从队列中删除并返回这些消息。

如果将类型或类型序列传递到 exclude 取而代之的是参数,然后仅 其他 消息将从队列中删除。如果一个 exclude 参数传递时, eventtype 参数 must 什么都不做。

如果您只从队列中获取特定事件,请注意,队列最终可能会被您不感兴趣的事件填满。

如果 pumpTrue (默认设置),然后 pygame.event.pump()internally process pygame event handlers 将会被召唤。

Changed in pygame 1.9.5: 已添加 pump 论据

Changed in pygame 2.0.2: 已添加 exclude 论据

pygame.event.poll()
get a single event from the queue
poll() -> Event instance

从队列中返回单个事件。如果事件队列为空,则返回类型为 pygame.NOEVENT 将立即退还。返回的事件将从队列中删除。

小心

此函数只能在初始化的线程中调用 pygame.displaypygame module to control the display window and screen

pygame.event.wait()
wait for a single event from the queue
wait() -> Event instance
wait(timeout) -> Event instance

从队列中返回单个事件。如果队列为空,则此函数将等待,直到创建一个队列。从pyGame 2.0.0开始,如果 timeout 参数,则函数将返回类型为 pygame.NOEVENT 如果没有事件进入队列 timeout 毫秒。返回事件后,将从队列中删除该事件。当程序等待时,它将在空闲状态下休眠。这对于希望与其他应用程序共享系统的程序很重要。

Changed in pygame 2.0.0.dev13: 已添加 timeout 论据

小心

此函数只能在初始化的线程中调用 pygame.displaypygame module to control the display window and screen

pygame.event.peek()
test if event types are waiting on the queue
peek(eventtype=None) -> bool
peek(eventtype=None, pump=True) -> bool

退货 True 是否有任何给定类型的事件在队列中等待。如果传递了一系列事件类型,则将返回 True 如果这些事件中有任何事件在队列中。

如果 pumpTrue (默认设置),然后 pygame.event.pump()internally process pygame event handlers 将会被召唤。

Changed in pygame 1.9.5: 已添加 pump 论据

pygame.event.clear()
remove all events from the queue
clear(eventtype=None) -> None
clear(eventtype=None, pump=True) -> None

从队列中删除所有事件。如果 eventtype 则移除给定的事件或事件序列。这具有与以下相同的效果 pygame.event.get()get events from the queueNone 被归还了。在清除已满的事件队列时,它的效率可能会稍微高一些。

如果 pumpTrue (默认设置),然后 pygame.event.pump()internally process pygame event handlers 将会被召唤。

Changed in pygame 1.9.5: 已添加 pump 论据

pygame.event.event_name()
get the string name from an event id
event_name(type) -> string

返回表示给定事件类型的名称(CapWords样式)的字符串。

对于用户事件id范围内的所有值,返回“UserEvent”。事件类型不存在时返回UNKNOWN。

pygame.event.set_blocked()
control which events are allowed on the queue
set_blocked(type) -> None
set_blocked(typelist) -> None
set_blocked(None) -> None

给定的事件类型不允许出现在事件队列中。默认情况下,所有事件都可以放在队列中。多次禁用一种事件类型是安全的。

如果 None 作为参数传递,则阻止将所有事件类型放置到队列中。

pygame.event.set_allowed()
control which events are allowed on the queue
set_allowed(type) -> None
set_allowed(typelist) -> None
set_allowed(None) -> None

允许给定的事件类型出现在事件队列上。默认情况下,所有事件类型都可以放在队列中。多次启用一种事件类型是安全的。

如果 None 作为参数传递,则允许将所有事件类型放置到队列中。

pygame.event.get_blocked()
test if a type of event is blocked from the queue
get_blocked(type) -> bool
get_blocked(typelist) -> bool

退货 True 如果从队列中阻止了给定的事件类型。如果传递了一系列事件类型,则将返回 True 如果这些事件类型中的任何一个被阻止。

pygame.event.set_grab()
control the sharing of input devices with other applications
set_grab(bool) -> None

当您的程序在窗口环境中运行时,它将与其他具有焦点的应用程序共享鼠标和键盘设备。如果您的程序将事件Grab设置为 True ,它将锁定您程序中的所有输入。

最好不要总是抓取输入,因为这会阻止用户在其系统上执行其他操作。

pygame.event.get_grab()
test if the program is sharing input devices
get_grab() -> bool

退货 True 获取此应用程序的输入事件时。

pygame.event.post()
place a new event on the queue
post(Event) -> bool

将给定事件放在事件队列的末尾。

这通常用于在事件队列中放置自定义事件。可以发布任何类型的事件,并且发布的事件可以具有任何属性。

这将返回一个关于事件是否已发布的布尔值。无法发布阻止的事件,并且此函数返回 False 如果你想把它们贴出来的话。

Changed in pygame 2.0.1: 返回之前返回的布尔值 None

pygame.event.custom_type()
make custom user event type
custom_type() -> int

储备a pygame.USEREVENT 用于定制使用。

如果将太多事件设置为 pygame.errorstandard pygame exception 都被养大了。

New in pygame 2.0.0.dev3.

pygame.event.Event
pygame object for representing events
Event(type, dict) -> Event
Event(type, **attributes) -> Event
event type identifier.
event attribute dictionary

用于表示事件的PYGAME对象。 Event 实例支持属性分配和删除。

创建对象时,属性可能来自带有字符串键的字典参数,也可能来自关键字参数。

备注

从2.1.3版开始 EventType 是的别名 Event 。事先, Event 是一个返回的函数 EventType 实例。使用 Event 是优先于 EventType 只要有可能,因为后者可能在将来的版本中被弃用。

type
event type identifier.
type -> int

只读。事件类型标识符。对于用户创建的事件对象,这是 type 参数传递给 pygame.event.Event()pygame object for representing events

例如,一些预定义的事件标识符为 QUITMOUSEMOTION

__dict__
event attribute dictionary
__dict__ -> dict

只读。事件的事件类型特定属性。这个 dict 属性是向后兼容性的同义词。

例如,一个 KEYDOWN 事件将是 unicodekey ,以及 mod

New in pygame 1.9.2: 可变属性。




Edit on GitHub