pyglet.input

支持操纵杆、游戏控制器、平板电脑和USB HID设备。

除了提供的常规鼠标和键盘支持外,此模块还为几乎所有输入设备提供统一接口 Window 。在最低层, get_devices() 可用于检索所有支持的设备的列表,包括操纵杆、平板电脑、游戏控制器、轮子、踏板、遥控器、键盘和鼠标。 返回的设备集根据操作系统(当然还有插入的设备)的不同而有很大差异。

在这个级别上,pyglet不会尝试解释 what 一个特定的设备仅仅是它提供的控制。一个 Control 可以是一个按钮,其值为 TrueFalse ,或者值为浮点型的相对轴或绝对值轴。有时可以提供控件的名称(例如, x 表示操纵杆的水平轴),但通常不是。在这些情况下,设备API可能仍然有用--必须要求用户依次按下每个按钮或分别移动每个轴以识别它们。

为操纵杆、游戏控制器、平板电脑和苹果遥控器提供了更高级别的界面。这些设备通常可以由pyglet肯定地识别,并且每个设备的基本功能级别通过公共接口提供。

要使用输入设备,请执行以下操作:

  1. 打电话 get_devices()get_apple_remote()get_controllers()get_joysticks() 以检索和识别设备。

  2. 对于低级设备(由检索 get_devices() ),查询控件的设备列表并确定您感兴趣的控件。对于高级接口,控件集由接口提供。

  3. 可以选择将事件处理程序附加到设备上的控件。对于高级别接口,可以使用其他事件。

  4. 打电话 Device.open() 开始在设备上接收事件。您可以在此时间之后开始查询控制值;它们将被异步更新。

  5. 打电话 Device.close() 当您使用完设备时(如果您的应用程序此时退出,则不需要)。

要使用平板电脑,请按照上述步骤使用 get_tablets() ,但请注意,没有可用的控制列表;相反,调用 Tablet.open() 返回一个 TabletCanvas 您应该在其上设置事件处理程序。

对于游戏控制器, ControllerManager 是可用的。这提供了一种方便的方式来处理控制器的热插拔。

Added in version 1.2.

班级

class ControllerManager

用于管理游戏控制器的高级界面。

此类提供了一种方便的方法来处理设备的连接和断开。所有已连接控制器的列表可以随时使用 get_controllers 方法。对于热插拔,事件被调度到 on_connecton_disconnect 。要使用ControllerManager,首先创建一个实例::

controller_man = pyglet.input.ControllerManager()

在游戏开始时,查询所有已连接的控制器:

controllers = controller_man.get_controllers()

要处理在游戏开始后连接或断开的控制器,请注册相应事件的处理程序:

@controller_man.event
def on_connect(controller):
    # code to handle newly connected
    # (or re-connected) controllers
    controller.open()
    print("Connect:", controller)

@controller_man.event
def on_disconnect(controller):
    # code to handle disconnected Controller
    print("Disconnect:", controller)

Added in version 1.2.

方法

get_controllers() list[Controller]

获取所有已连接控制器的列表

返回类型:

list[Controller]

事件

on_connect(controller) Controller

已连接控制器。如果这是正在重新连接的先前断开的控制器,则将返回相同的控制器实例。

返回类型:

Controller

on_disconnect(controller) Controller

控制器已断开连接。

返回类型:

Controller

__init__()
__new__(**kwargs)
class Device

基类:object

低级输入设备。

__init__(display: Display, name: str) None

创建一个设备来接收输入。

参数:
  • display (Display) -- 此设备连接到的显示器。

  • name (str) -- 设备的名称,如设备硬件所描述的。

close() None

关闭设备。

返回类型:

None

get_controls() list[Control]

获取设备提供的控件列表。

返回类型:

list[Control]

get_guid() str

获取SDL2格式的设备GUID。

返回包含唯一设备标识字符串的字符串。这是从硬件标识符中生成的,其格式与SDL2推广的格式相同。GUID因平台而异,但通常为32个十六进制字符。

返回类型:

str

open(
window: None | Window = None,
exclusive: bool = False,
) None

打开设备以开始接收来自它的输入。

参数:
  • window (None | Window) -- 与设备关联的可选窗口。此参数的行为取决于设备和操作系统。对于大多数设备,它通常可以省略。

  • exclusive (bool) -- 如果 True 该设备将被独占打开,这样其他应用程序就无法使用它。

抛出:

DeviceOpenException -- 如果设备无法在独占模式下打开,通常 由于由另一个应用程序独家打开。

返回类型:

None

property is_open: bool
manufacturer: str | None

制造商名称(如果有的话)

class Control

基类:EventDispatcher

由设备提供的单值输入。

当设备打开时,可以查询控件的值。可以将事件处理程序附加到要在值更改时调用的控件。

这个 minmax 属性按设备公布的方式提供;在某些情况下,控件的值将超出此范围。

事件

on_change(value) float

值已更改。

返回类型:

float

属性

value

控件的当前值。

该值的范围取决于设备;对于绝对控件,该范围由 minmax (但是,该值可能超过此范围);对于相对控件,范围未定义。

__init__(
name: None | str,
raw_name: None | str = None,
inverted: bool = False,
)

创建一个控件来接收输入。

参数:
  • name (None | str) -- 控件的名称,或 None 如果未知的话。

  • raw_name (None | str) -- 可选的未修改控件名称,如操作系统所示;或 None 如果未知的话。

  • inverted (bool) -- 如果 True ,报告的值实际上与设备报告的值相反;这通常是为了提供跨操作系统的一致性。

__new__(**kwargs)
class RelativeAxis

基类:Control

其值表示相对于上一个值的相对变化的轴。

这种类型的轴用于可以连续滚动或移动的控件,例如滚动或定点输入。该值被读取为与前一值的增量变化。

RX: str = 'rx'
RY: str = 'ry'
RZ: str = 'rz'
WHEEL: str = 'wheel'
X: str = 'x'
Y: str = 'y'
Z: str = 'z'
property value: float

控件的当前值。

该值的范围取决于设备;对于绝对控件,该范围由 minmax (但是,该值可能超过此范围);对于相对控件,范围未定义。

class AbsoluteAxis

基类:Control

一个轴,其值代表设备的当前测量值。

这种类型的轴用于具有最小和最大位置的控件。该值介于 minmax

__init__(
name: str,
minimum: float,
maximum: float,
raw_name: None | str = None,
inverted: bool = False,
)

创建一个控件来接收输入。

参数:
  • name (str) -- 控件的名称,或 None 如果未知的话。

  • raw_name (None | str) -- 可选的未修改控件名称,如操作系统所示;或 None 如果未知的话。

  • inverted (bool) -- 如果 True ,报告的值实际上与设备报告的值相反;这通常是为了提供跨操作系统的一致性。

HAT: str = 'hat'
HAT_X: str = 'hat_x'
HAT_Y: str = 'hat_y'
RX: str = 'rx'
RY: str = 'ry'
RZ: str = 'rz'
X: str = 'x'
Y: str = 'y'
Z: str = 'z'
class Button

基类:Control

值为布尔值的控件。

事件

on_press()

按钮被按下了。

on_release()

按钮被松开了。

属性

value
__init__(
name: None | str,
raw_name: None | str = None,
inverted: bool = False,
)

创建一个控件来接收输入。

参数:
  • name (None | str) -- 控件的名称,或 None 如果未知的话。

  • raw_name (None | str) -- 可选的未修改控件名称,如操作系统所示;或 None 如果未知的话。

  • inverted (bool) -- 如果 True ,报告的值实际上与设备报告的值相反;这通常是为了提供跨操作系统的一致性。

__new__(**kwargs)
class Controller

基类:EventDispatcher

游戏控制器的高级界面。

与操纵杆不同,控制器有一组严格定义的输入,与流行的家庭视频游戏机控制器的布局相匹配。这包括各种面部和肩部按钮、模拟杆和触发器、方向垫以及可选的隆隆声(力反馈)效果。

要使用控制器,您必须首先调用 open .然后,只要输入发生变化,控制器就会调度各种事件。还可以随时手动对其进行民意调查,以查找任何输入的当前值。模拟棒输入被标准化到范围 [-1.0, 1.0] ,并将触发器标准化到范围 [0.0, 1.0] .所有其他输入都是数字的。

注意:需要运行的应用程序事件循环

调度以下事件类型:

on_button_press on_button_release on_stick_motion on_dpad_motion on_trigger_motion

方法

open(
window: None | Window = None,
exclusive: bool = False,
) None

打开控制器。看见 Device.open

返回类型:

None

close() None

关闭控制器。看见 Device.close

返回类型:

None

事件

on_stick_motion(
controller: Controller,
stick: str,
xvalue: float,
yvalue: float,
)

控制器模拟棒的值发生了变化。

参数:
  • controller (Controller) -- 模拟操纵杆发生变化的控制器。

  • stick (str) -- 更改后的棒子的名称。

  • xvalue (float) -- 当前X轴值,规格化为 [-1, 1] 。

  • yvalue (float) -- 当前Y轴值,规格化为 [-1, 1] 。

on_dpad_motion(
controller: Controller,
dpleft: bool,
dpright: bool,
dpup: bool,
dpdown: bool,
)

控制器的方向垫发生了变化。

参数:
  • controller (Controller) -- 其HAT控件已更改的控制器。

  • dpleft (bool) -- 如果在方向垫上按下Left,则为True。

  • dpright (bool) -- 如果在方向垫上按下Right,则为True。

  • dpup (bool) -- 如果在方向垫上按Up,则为True。

  • dpdown (bool) -- 如果方向垫上按下了Down,则为True。

on_trigger_motion(
controller: Controller,
trigger: str,
value: float,
)

控制器模拟棒的值发生了变化。

参数:
  • controller (Controller) -- 模拟操纵杆发生变化的控制器。

  • trigger (str) -- 更改的触发器的名称。

  • value (float) -- 触发器的当前值,规范化为 [0, 1] 。

on_button_press(controller: Controller, button: str)

按下了控制器上的按钮。

参数:
  • controller (Controller) -- 按钮被按下的控制器。

  • button (str) -- 按下的按钮的名称。

on_button_release(controller: Controller, button: str)

操纵杆上的一个按钮被释放了。

参数:
  • controller (Controller) -- 按钮被释放的控制器。

  • button (str) -- 释放的按钮的名称。

__init__(device: Device, mapping: dict)

创建映射到设备的控制器状态。

Added in version 2.0.

__new__(**kwargs)
class Joystick

基类:EventDispatcher

操纵杆类设备的高级接口。这包括各种各样的模拟和数字操纵杆、游戏手柄、控制器,甚至可能还有方向盘和其他输入设备。不幸的是,没有简单的方法来区分这些不同的设备类型中的大多数。

有关操纵杆的简化子集,请参阅 Controller 界面。它涵盖了各种流行的游戏机控制器。与操纵杆不同,控制器有严格定义的布局和输入。

要使用操纵杆,请先拨打 open ,然后在您的游戏循环中检查 xy 以此类推。这些值被归一化为范围 [-1.0, 1.0] 。

要在轴值更改时接收事件,请将on_joyaxis_motion事件处理程序附加到操纵杆。的 Joystick 实例、轴名称和当前值作为参数传递给此事件。

要处理按钮事件,您应该将on_joybutton_press和on_joy_button_release事件处理程序附加到操纵杆。两者 Joystick 实例和已更改按钮的索引作为参数传递给这些事件。

或者,您可以将事件处理程序附加到 button_controls 接收On_Press或On_Release事件。

要使用帽子开关,请将on_joyhat_motion事件处理程序连接到操纵杆。每当帽子开关的值发生变化时,处理程序将同时使用hat_x和hat_y值调用。

可以查询设备名称以获得操纵杆的名称。

方法

open(window: None | Window, exclusive: bool = False) None

打开操纵杆设备。看见 Device.open

返回类型:

None

close() None

合上操纵杆装置。看见 Device.close

返回类型:

None

事件

on_joyaxis_motion(
joystick: Joystick,
axis: str,
value: float,
)

操纵杆轴的值已更改。

参数:
  • joystick (Joystick) -- 轴发生变化的操纵杆装置。

  • axis (str) -- 更改的轴的名称。

  • value (float) -- 轴的当前值,归一化为 [-1, 1] 。

on_joyhat_motion(
joystick: Joystick,
hat_x: float,
hat_y: float,
)

操纵杆帽子开关的值已更改。

参数:
  • joystick (Joystick) -- 帽子控制发生变化的操纵杆设备。

  • hat_x (float) -- 当前帽子(大写)水平位置;-1.0(左)、0.0(中间)或1.0(右)之一。

  • hat_y (float) -- 当前帽子(大写)垂直位置;-1.0(底部)、0.0(中间)或1.0(顶部)之一。

on_joybutton_press(joystick: Joystick, button: int)

按下了操纵杆上的一个按钮。

参数:
  • joystick (Joystick) -- 按下按钮的操纵杆设备。

  • button (int) -- 索引(In) button_controls 按下的按钮)。

on_joybutton_release(joystick: Joystick, button: int)

操纵杆上的一个按钮被释放了。

参数:
  • joystick (Joystick) -- 按钮被释放的操纵杆设备。

  • button (int) -- 索引(In) button_controls )按钮被释放。

__init__(device)
__new__(**kwargs)
class AppleRemote

基类:EventDispatcher

苹果遥控器的高级界面。

该界面提供对遥控器上的6个按钮控件的访问。按下并按住遥控器上的某些按钮被解释为单独的控件。

方法

open(window: Window, exclusive: bool = False)

打开设备。看见 Device.open

close()

关闭设备。看见 Device.close

事件

on_button_press(button: str)

遥控器上的一个按钮被按下了。

当第一次按下按钮时,只有‘向上’和‘向下’按钮才会生成事件。遥控器上的所有其他按钮将等待该按钮被释放,然后同时发送按下和释放事件。

参数:

button (str) -- 按下的按钮的名称。有效名称为‘UP’、‘DOWN’、‘LEFT’、‘RIGHT’、‘LEFT_HOLD’、‘RIGHT_HOLD’、‘MENU’、‘MENU_HOLD’、‘SELECT’和‘SELECT_HOLD’

on_button_release(button: str)

遥控器上的一个按钮被释放了。

无论用户是否已释放按钮,都会在相应的按下事件之后立即发送‘SELECT_HOLD’和‘MENU_HOLD’按钮释放事件。

参数:

button (str) -- 释放的按钮的名称。有效名称为‘UP’、‘DOWN’、‘LEFT’、‘RIGHT’、‘LEFT_HOLD’、‘RIGHT_HOLD’、‘MENU’、‘MENU_HOLD’、‘SELECT’和‘SELECT_HOLD’

__init__(device)
__new__(**kwargs)
class Tablet

与平板电脑设备的高级接口。

与其他设备不同,平板电脑必须为特定窗口打开,而不能以独占方式打开。这个 open 方法返回一个 TabletCanvas 对象,该对象支持Tablet提供的事件。

目前只能使用一个平板设备,尽管它可以在多个窗口中打开。如果连接了多个平板电脑,则行为未定义。

__init__()
__new__(**kwargs)

功能

get_apple_remote(display: None | Display = None) AppleRemote | None

获取Apple远程控制设备(如果存在)。

Apple Remote是最新款苹果台式机和笔记本电脑附带的白色6键小遥控器。这款遥控器只能在Mac OS X上使用。

参数:

display (None | Display) -- 当前已被忽略。

返回类型:

AppleRemote | None

get_devices(
display: None | Display = None,
) list[Device]

获取所有连接的输入设备的列表。

参数:

display (None | Display) -- 要查询输入设备的显示设备。在Mac OS X和Windows上被忽略。在Linux上,默认为默认显示设备。

返回类型:

list[Device]

get_controllers(
display: None | Display = None,
) list[Controller]

获取已连接控制器的列表。

参数:

display (None | Display) -- 要查询输入设备的显示设备。在Mac OS X和Windows上被忽略。在Linux上,默认为默认显示设备。

返回类型:

list[Controller]

get_joysticks(
display: None | Display = None,
) list[Joystick]

获取附加操纵杆的列表。

参数:

display (None | Display) -- 要查询输入设备的显示设备。在Mac OS X和Windows上被忽略。在Linux上,默认为默认显示设备。

返回类型:

list[Joystick]

get_tablets(
display: None | Display = None,
) list[Tablet]

获取一份平板电脑清单。

即使没有连接平板设备,此函数也可能返回有效的平板设备(例如,在Mac OS X上无法确定是否连接了平板设备)。尽管返回了一份平板电脑列表,但pyglet目前不支持多台平板电脑,如果连接了多台平板电脑,其行为尚不确定。

参数:

display (None | Display) -- 要查询输入设备的显示设备。在Mac OS X和Windows上被忽略。在Linux上,默认为默认显示设备。

返回类型:

list[Tablet]

例外情况

class DeviceException
class DeviceOpenException
class DeviceExclusiveException