-
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.display
pygame 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.mouse
pygame module to work with the mouse ,pygame.key
pygame module to work with the keyboard ,以及pygame.joystick
Pygame module for interacting with joysticks, gamepads, and trackballs. 。如果您使用这种方法,请记住,pyGame需要与系统窗口管理器和平台的其他部分进行某种形式的通信。要使pyGame与系统保持同步,您需要调用pygame.event.pump()
internally process pygame event handlers 让一切保持最新。通常,这应该在每个游戏循环中调用一次。注意:在设备初始化之前,操纵杆不会发送任何事件。事件队列包含
pygame.event.Event
pygame object for representing events 事件对象。有多种方法可以访问排队的事件,从简单地检查事件的存在,到直接从堆栈中获取它们。事件队列还提供了一些简单的筛选,通过阻止队列中的某些事件类型可以略微提高性能。使用pygame.event.set_allowed()
control which events are allowed on the queue 和pygame.event.set_blocked()
control which events are allowed on the queue 若要更改此筛选,请执行以下操作。默认情况下,所有事件类型都可以放在队列中。全
pygame.event.Event
pygame object for representing events 实例包含特定于该事件类型的事件类型标识符和属性。事件类型标识符可作为pygame.event.Event.type
event type identifier. 财产。任何特定于事件的属性都可以通过pygame.event.Event.__dict__
event attribute dictionary 属性或直接作为事件对象的属性(因为成员查找被传递到对象的字典值)。该事件对象没有方法函数。用户可以使用创建自己的新事件pygame.event.Event()
pygame object for representing events 功能。事件类型标识符介于
NOEVENT
和NUMEVENTS
。用户定义的事件的值应在以下范围内USEREVENT
至NUMEVENTS - 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。请注意,
ACTIVEEVENT
,VIDEORESIZE
和VIDEOEXPOSE
都被认为是“遗留”事件,使用Pigame2WINDOWEVENT
推荐使用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
事件指示事件是否由触摸输入设备生成,而不是由真正的鼠标生成。如果您的应用程序已处理此类事件,则可能需要忽略这些事件FINGERMOTION
,FINGERDOWN
和FINGERUP
事件。New in pygame 2.1.3: 已添加
precise_x
和precise_y
至MOUSEWHEEL
活动PYGAME 2中引入了许多新的事件。
PYGAME可以识别窗口中放置的文本或文件。如果文件被丢弃,
DROPFILE
事件将被发送,file
将是它的道路。这个DROPTEXT
事件仅在X11上支持。MIDIIN
和MIDIOUT
活动是否预留给pygame.midi
pygame 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
andLOCALECHANGED
从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)
WINDOWMOVED
,WINDOWRESIZED
和WINDOWSIZECHANGED
有x
和y
属性、WINDOWDISPLAYCHANGED
有一个display_index
属性。所有窗口事件都有一个window
属性。New in pygame 2.0.1.
New in pygame 2.1.3:
WINDOWICCPROFCHANGED
andWINDOWDISPLAYCHANGED
在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 handlerspump() -> None
对于游戏的每一帧,您将需要对事件队列进行某种调用。这确保了您的程序可以与操作系统的其余部分进行内部交互。如果在游戏中未使用其他事件函数,则应调用
pygame.event.pump()
以允许pyGame处理内部操作。如果您的程序一直通过另一个处理队列上的事件,则此函数不是必需的
pygame.event
pygame module for interacting with events and queues 功能。在事件队列中有一些重要的事情必须在内部处理。主窗口可能需要重新绘制或响应系统。如果调用事件队列的时间太长,系统可能会判定您的程序已锁定。
小心
此函数只能在初始化的线程中调用
pygame.display
pygame module to control the display window and screen 。
- pygame.event.get()¶
- get events from the queueget(eventtype=None) -> Eventlistget(eventtype=None, pump=True) -> Eventlistget(eventtype=None, pump=True, exclude=None) -> Eventlist
这将获取所有消息并将其从队列中删除。如果给定了类型或类型序列,则只会从队列中删除并返回这些消息。
如果将类型或类型序列传递到
exclude
取而代之的是参数,然后仅 其他 消息将从队列中删除。如果一个exclude
参数传递时,eventtype
参数 must 什么都不做。如果您只从队列中获取特定事件,请注意,队列最终可能会被您不感兴趣的事件填满。
如果
pump
是True
(默认设置),然后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 queuepoll() -> Event instance
从队列中返回单个事件。如果事件队列为空,则返回类型为
pygame.NOEVENT
将立即退还。返回的事件将从队列中删除。小心
此函数只能在初始化的线程中调用
pygame.display
pygame module to control the display window and screen 。
- pygame.event.wait()¶
- wait for a single event from the queuewait() -> Event instancewait(timeout) -> Event instance
从队列中返回单个事件。如果队列为空,则此函数将等待,直到创建一个队列。从pyGame 2.0.0开始,如果
timeout
参数,则函数将返回类型为pygame.NOEVENT
如果没有事件进入队列timeout
毫秒。返回事件后,将从队列中删除该事件。当程序等待时,它将在空闲状态下休眠。这对于希望与其他应用程序共享系统的程序很重要。Changed in pygame 2.0.0.dev13: 已添加
timeout
论据小心
此函数只能在初始化的线程中调用
pygame.display
pygame module to control the display window and screen 。
- pygame.event.peek()¶
- test if event types are waiting on the queuepeek(eventtype=None) -> boolpeek(eventtype=None, pump=True) -> bool
退货
True
是否有任何给定类型的事件在队列中等待。如果传递了一系列事件类型,则将返回True
如果这些事件中有任何事件在队列中。如果
pump
是True
(默认设置),然后pygame.event.pump()
internally process pygame event handlers 将会被召唤。Changed in pygame 1.9.5: 已添加
pump
论据
- pygame.event.clear()¶
- remove all events from the queueclear(eventtype=None) -> Noneclear(eventtype=None, pump=True) -> None
从队列中删除所有事件。如果
eventtype
则移除给定的事件或事件序列。这具有与以下相同的效果pygame.event.get()
get events from the queue 除None
被归还了。在清除已满的事件队列时,它的效率可能会稍微高一些。如果
pump
是True
(默认设置),然后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 idevent_name(type) -> string
返回表示给定事件类型的名称(CapWords样式)的字符串。
对于用户事件id范围内的所有值,返回“UserEvent”。事件类型不存在时返回UNKNOWN。
- pygame.event.set_blocked()¶
- control which events are allowed on the queueset_blocked(type) -> Noneset_blocked(typelist) -> Noneset_blocked(None) -> None
给定的事件类型不允许出现在事件队列中。默认情况下,所有事件都可以放在队列中。多次禁用一种事件类型是安全的。
如果
None
作为参数传递,则阻止将所有事件类型放置到队列中。
- pygame.event.set_allowed()¶
- control which events are allowed on the queueset_allowed(type) -> Noneset_allowed(typelist) -> Noneset_allowed(None) -> None
允许给定的事件类型出现在事件队列上。默认情况下,所有事件类型都可以放在队列中。多次启用一种事件类型是安全的。
如果
None
作为参数传递,则允许将所有事件类型放置到队列中。
- pygame.event.get_blocked()¶
- test if a type of event is blocked from the queueget_blocked(type) -> boolget_blocked(typelist) -> bool
退货
True
如果从队列中阻止了给定的事件类型。如果传递了一系列事件类型,则将返回True
如果这些事件类型中的任何一个被阻止。
- pygame.event.set_grab()¶
- control the sharing of input devices with other applicationsset_grab(bool) -> None
当您的程序在窗口环境中运行时,它将与其他具有焦点的应用程序共享鼠标和键盘设备。如果您的程序将事件Grab设置为
True
,它将锁定您程序中的所有输入。最好不要总是抓取输入,因为这会阻止用户在其系统上执行其他操作。
- pygame.event.get_grab()¶
- test if the program is sharing input devicesget_grab() -> bool
退货
True
获取此应用程序的输入事件时。
- pygame.event.post()¶
- place a new event on the queuepost(Event) -> bool
将给定事件放在事件队列的末尾。
这通常用于在事件队列中放置自定义事件。可以发布任何类型的事件,并且发布的事件可以具有任何属性。
这将返回一个关于事件是否已发布的布尔值。无法发布阻止的事件,并且此函数返回
False
如果你想把它们贴出来的话。Changed in pygame 2.0.1: 返回之前返回的布尔值
None
- pygame.event.custom_type()¶
- make custom user event typecustom_type() -> int
储备a
pygame.USEREVENT
用于定制使用。如果将太多事件设置为
pygame.error
standard pygame exception 都被养大了。New in pygame 2.0.0.dev3.
- pygame.event.Event¶
- pygame object for representing eventsEvent(type, dict) -> EventEvent(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 。例如,一些预定义的事件标识符为
QUIT
和MOUSEMOTION
。
- __dict__¶
- event attribute dictionary__dict__ -> dict
只读。事件的事件类型特定属性。这个
dict
属性是向后兼容性的同义词。例如,一个
KEYDOWN
事件将是unicode
,key
,以及mod
New in pygame 1.9.2: 可变属性。
Edit on GitHub