输入管理

我们的输入系统既广泛又简洁。目前,我们能够原生支持:

  • Windows 多点触控事件(手写笔和手指)

  • OS X 触控板

  • Linux 多点触控事件(内核与 mtdev)

  • Linux Wacom 驱动(手写笔和手指)

  • TUIO

所有输入管理均可在Kivy的:mod:`~kivy.config`中进行配置。您可以在一个Kivy应用程序中轻松使用多种多点触控设备。

当从设备读取事件后,它们会经过一个后处理模块进行分发,然后才发送到您的应用程序。我们还提供了几个默认模块,用于:

  • 双击检测

  • 减少抖动

  • 降低在“劣质”DIY硬件上触摸的不准确性

  • 忽略区域

class kivy.input.MotionEvent(device, id, args, is_touch=False, type_id=None)[源代码]

基类:MotionEvent

表示输入事件的抽象类。

参数:
id:字符串

MotionEvent 的唯一标识符。

args:列表

传递给depack()函数的参数列表

apply_transform_2d(transform)[源代码]

对 x、y、z、px、py、pz、ox、oy、oz、dx、dy、dz 应用变换。

button

当前按下的按钮。

copy_to(to)[源代码]

将某些属性复制到另一个运动事件对象中。

depack(args)[源代码]

args 解包为类的属性。

device

用于创建此事件的设备。

dispatch_done()[源代码]

通知分发到监听器已完成。

EventLoopBase.post_dispatch_input() 调用。

在 2.1.0 版本加入.

dispatch_mode

(实验性)由事件管理器或控件用于指定分发模式。默认为 MODE_DEFAULT_DISPATCH。有关可用模式,请参阅 eventmanager

在 2.1.0 版本加入.

distance(other_touch)[源代码]

返回两个事件之间的距离。

double_tap_time

如果触摸是 is_double_tap,这是上一次点击与当前触摸之间的时间。

property dpos

返回屏幕坐标系中最后位置与当前位置之间的差值(self.dx, self.dy)。

dsx

self.sx 与 self.psx 之间的差值,范围在 0-1 之间。

dsy

self.sy 与 self.psy 之间的差值,范围在 0-1 之间。

dsz

self.sz 与 self.psz 之间的差值,范围在 0 到 1 之间。

dx

self.x 与 self.px 之间的差值,在窗口范围内。

dy

self.y 与 self.py 之间的差值,范围在窗口内。

dz

self.z 与 self.pz 之间的差值,位于窗口范围内。

grab(class_instance, exclusive=False)[源代码]

抓取此运动事件。

如果这是一个触摸事件,你可以抓取它,以便接收后续的 on_touch_move()on_touch_up() 事件,即使该触摸不是由父级分发的。

def on_touch_down(self, touch):
    touch.grab(self)

def on_touch_move(self, touch):
    if touch.grab_current is self:
        # I received my grabbed touch
    else:
        # it's a normal touch

def on_touch_up(self, touch):
    if touch.grab_current is self:
        # I receive my grabbed touch, I must ungrab it!
        touch.ungrab(self)
    else:
        # it's a normal touch
        pass

在 2.1.0 版本发生变更: 允许非触摸事件进行抓取。

grab_current

用于确定事件被分发到哪个控件。更多信息请参阅 grab() 函数。

id

事件的ID,并非唯一。这通常是由输入提供者设置的ID,如TUIO中的ID。如果你有多个TUIO源,则可能使用相同的ID。建议优先使用 uid 属性。

is_double_tap

指示触摸事件是否为双击。

property is_mouse_scrolling

如果触摸事件是鼠标滚轮滚动,则返回 True。

在 1.6.0 版本加入.

is_touch

如果MotionEvent是触摸事件,则为True。

is_triple_tap

指示该触摸事件是否为三次点击。

在 1.7.0 版本加入.

move(args)[源代码]

移动到另一个位置。

property opos

返回运动事件在屏幕坐标系中的初始位置(self.ox, self.oy)。

osx

原点X位置,范围在0-1之间。

osy

原点Y位置,范围在0-1之间。

osz

原点Z位置,范围在0-1之间。

ox

窗口范围内的原点X坐标。

oy

窗口范围内的原点Y位置。

oz

窗口范围内的原始Z轴位置。

pop()[源代码]

从堆栈中弹出属性值。

pos

窗口范围内的位置 (X, Y)。

property ppos

返回运动事件在屏幕坐标系中的先前位置(self.px, self.py)。

profile

事件中当前使用的配置文件。

psx

之前的X位置,范围在0-1之间。

psy

之前的Y位置,范围在0-1之间。

psz

之前的Z位置,范围在0-1之间。

push(attrs=None)[源代码]

attrs 中的属性值推入栈中。

push_attrs_stack

默认情况下,当我们使用 push() 时,需要推送的属性包括:x、y、z、dx、dy、dz、ox、oy、oz、px、py、pz。

px

之前的X位置,位于窗口范围内。

py

之前的Y位置,位于窗口范围内。

pz

之前的Z位置,位于窗口范围内。

scale_for_screen(w, h, p=None, rotation=0, smode='None', kheight=0)[源代码]

为屏幕缩放位置。

在 2.1.0 版本发生变更: xyz 的最大值分别改为 w - 1、h - 1 和 p - 1。

shape

触摸事件的形状,是 Shape 的子类。默认情况下,该属性设置为 None。

property spos

返回在0-1坐标系中的位置(self.sx, self.sy)。

sx

X 位置,范围为 0-1。

sy

Y 位置,范围为 0-1。

sync_with_dispatch

如果设置为 True`(默认值),则保留第一个先前位置(X、Y、Z 在 0-1 范围内),并忽略所有其他位置,直到从 `EventLoop 调用 MotionEvent.dispatch_done() 为止。

该属性是必需的,因为事件提供者可以对 MotionEvent.move() 进行多次调用,但对于所有这些调用,事件仅向监听器分发一次。将值设为 False 将保留最近的前一个位置。参见 MotionEvent.move()

在 2.1.0 版本加入.

sz

Z 位置,范围在 0-1 之间。

time_end

结束事件的时间(最后一次事件使用的时间)。

time_start

事件创建的初始时间。

time_update

最后一次更新的时间。

to_absolute_pos(nx, ny, x_max, y_max, rotation)[源代码]

使用`x_max`、`y_max`和`rotation`将归一化(0-1)坐标`nx`和`ny`转换为绝对坐标。

引发:

ValueError:如果 rotation 不是以下值之一:0、90、180 或 270。

在 2.1.0 版本加入.

triple_tap_time

如果触摸是 is_triple_tap,则这是第一次点击与当前触摸之间的时间。

在 1.7.0 版本加入.

type_id

(实验性)用于标识事件类型的字符串。

在 2.1.0 版本加入.

ud

用户数据字典。使用此字典在事件上保存您自己的数据。

uid

事件的唯一标识符。您可以放心使用此属性,它在所有现有事件中绝不会重复。

ungrab(class_instance)[源代码]

释放之前捕获的运动事件。

x

窗口范围内的X位置。

y

窗口范围内的Y坐标。

z

窗口范围内的Z轴位置。

class kivy.input.MotionEventFactory[源代码]

基类:object

MotionEvent 工厂是一个注册所有可用输入工厂的类。如果你创建了一个新的输入工厂,你需要在此处注册它:

MotionEventFactory.register('myproviderid', MyInputProvider)
static get(name)[源代码]

从提供者ID获取提供者类。

static list()[源代码]

获取所有可用提供者的列表

static register(name, classname)[源代码]

在数据库中注册一个输入提供器。

class kivy.input.MotionEventProvider(device, args)[源代码]

基类:object

提供者的基类。

start()[源代码]

启动提供程序。当应用程序启动且配置使用当前提供程序时,此方法会自动调用。

stop()[源代码]

停止提供程序。

update(dispatch_fn)[源代码]

更新提供者,并通过`dispatch_fn`参数分发所有新的触摸事件。