Kivy 简明教程

Kivy - Input Recorder

Kivy 框架中 Recorder 类的功能仍在开发中,目前正处于实验阶段。Recorder 对象记录了输入事件,例如触摸事件、键事件和单击事件。这些事件记录在一个扩展名为“ .kvi”的文件中。Kivy 使用此文件并通过生成等效的伪事件并将其分派到事件循环来重放事件。

Recorder 类在“kivy.input.recorder”模块中定义 −

from kivy.input.recorder import Recorder
rec = Recorder(**kwargs)

要开始录制,请在实例化 Recorder 对象后按 F8。事件数据记录在当前文件夹中的“recorder.kvi”文件中。你可以为 file 属性指定任何其他文件名。

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

按 F7 重播事件。

要手动控制录制和重放,请使用 Recorder 对象的 record 和 play 属性。

开始录制 −

rec = Recorder(filename='myrecorder.kvi')
rec.record = True
rec.start()

停止录制 −

rec.record = False
rec.stop()

类似地,开始重播 −

rec.play = True
rec.start()

停止播放 −

rec.play = False
rec.stop()

你可以让重播持续循环 −

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

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

Example

在下面的代码中,一个标签被添加到一个 Scatter 窗口小部件,这样你就可以执行旋转、缩放和变换。此外,文本属性的标签在用户更改 TextInput 框的内容时更新。

事件的录制和重放是在两个按钮的 on_press 事件中定义的。

下面是完整的代码 −

from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.scatter import Scatter
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.textinput import TextInput
from kivy.uix.togglebutton import ToggleButton
from kivy.input.recorder import Recorder
from kivy.core.window import Window

Window.size = (720,400)

class scatterdemoapp(App):
   def build(self):
      self.rec = Recorder(filename='myrecorder.kvi')

      box=BoxLayout(orientation='vertical')
      box1=BoxLayout(orientation='horizontal')
      text1=TextInput(text='Hi', pos_hint={'top':1},height=100, size_hint=(.5, None))
      b1=ToggleButton(text='record',pos_hint={'top':1}, height=100, size_hint=(.25, None))
      b1.bind(on_press=self.on_recording)
      b2=ToggleButton(text='play', pos_hint={'top':1},height=100, size_hint=(.25, None))
      b2.bind(on_press=self.on_playing)
      box1.add_widget(text1)
      box1.add_widget(b1)
      box1.add_widget(b2)
      box.add_widget(box1)
      scatr=Scatter()
      self.lbl=Label(text="Hi", font_size=60, pos=(Window.width/2-100,200 ))

      text1.bind(text=self.lbl.setter('text'))
      scatr.add_widget(self.lbl)
      box.add_widget(scatr)

      return box

   def on_recording(self, obj):
      if obj.state=='down':
         self.rec.record=True
         self.rec.start()
      else:
         self.rec.record=False
         self.rec.stop()
   def on_playing(self, obj):
      if obj.state=='down':
         self.rec.play=True
         self.rec.start()
      else:
         self.rec.play=False
         self.rec.stop()

scatterdemoapp().run()

Output

应用窗口显示如下 −

kivy input recorder

点击录制按钮,所有屏幕活动(包括 key_down 事件)都将记录在“.kvi”文件中。控制台窗口显示输入已记录。

[INFO ] [Recorder ] Recording inputs to 'myrecorder.kvi'
[INFO ] [Recorder ] Recorded 901 events in 'myrecorder.kvi'

在按下播放按钮后,重放所记录的事件。因此,控制台会回显相应的日志。

[INFO ] [Recorder ] Start playing 901 events from 'myrecorder.kvi'