输入记录器

在 1.1.0 版本加入.

警告

Kivy 的这一部分仍处于实验阶段,此 API 在未来的版本中可能会有所更改。

这是一个能够记录并重放某些输入事件的类。它可用于测试用例、屏幕保护程序等场景。

一旦激活,记录器将监听任何输入事件,并将其属性连同时间差保存到文件中。之后,您可以播放该输入文件:它将根据保存的属性生成模拟触摸事件,并将其分发到事件循环中。

默认情况下,仅保存位置('pos' 配置文件和 'sx'、'sy' 属性)。除非你理解输入处理的工作原理,否则不要更改此设置。

记录事件

最佳方式是使用“recorder”模块。请查阅 模块 文档,了解如何激活该模块。

激活后,您可以按F8开始录制。默认情况下,事件将写入`<当前路径>/recorder.kvi`。当您想要停止录制时,再次按F8即可。

你可以按 F7 键重播该文件。

请参阅 录音机模块 模块以获取更多信息。

手动播放

您可以手动打开一个录制文件,并通过以下方式播放它::

from kivy.input.recorder import Recorder

rec = Recorder(filename='myrecorder.kvi')
rec.play = True

如果你想遍历那个文件,可以这样做:

from kivy.input.recorder import Recorder

def recorder_loop(instance, value):
    if value is False:
        instance.play = True

rec = Recorder(filename='myrecorder.kvi')
rec.bind(play=recorder_loop)
rec.play = True

记录更多属性

你可以扩展要保存的属性,但有一个条件:属性值必须是简单值,不能是复杂类的实例。

假设你想保存触摸的角度和压力(如果可用的话):

from kivy.input.recorder import Recorder

rec = Recorder(filename='myrecorder.kvi',
    record_attrs=['is_touch', 'sx', 'sy', 'angle', 'pressure'],
    record_profile_mask=['pos', 'angle', 'pressure'])
rec.record = True

或者使用模块变量::

$ python main.py -m recorder,attrs=is_touch:sx:sy:angle:pressure,             profile_mask=pos:angle:pressure

已知限制

  • 无法保存带有复杂类实例的属性。

  • 表示时间的值将不会被调整。

  • 只能重放完整的记录。如果缺少开始/更新/结束事件,可能会导致幽灵触摸。

  • 提前结束回放可能导致“幽灵触摸”现象。

class kivy.input.recorder.Recorder(**kwargs)[源代码]

基类:EventDispatcher

Recorder 类。请查看模块文档以获取更多信息。

事件:
on_stop

当播放停止时触发。

在 1.10.0 版本发生变更: 添加了 on_stop 事件。

counter

上次会话中记录的事件数量。

counter 是一个 NumericProperty,默认值为 0,且为只读属性。

filename

用于保存记录器输出的文件名。

filename 是一个 StringProperty,默认值为 'recorder.kvi'。

play

用于启动/停止当前文件(如果存在)回放的布尔值。

play 是一个 BooleanProperty,默认值为 False。

record

布尔值,用于开始/停止输入事件的记录。

record 是一个 BooleanProperty,默认值为 False。

record_attrs

要从运动事件中记录的属性。

record_attrs 是一个 ListProperty,默认值为 ['is_touch', 'sx', 'sy']。

record_profile_mask

回放时在模拟运动事件中保存的配置文件。

record_profile_mask 是一个 ListProperty,默认值为 ['pos']。

window

附加录音器的窗口实例。若为None,则使用默认实例。

window 是一个 ObjectProperty,默认值为 None。