Kivy - 输入记录器



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

示例

在下面给出的代码中,一个 Label 被添加到一个 Scatter 组件中,以便您可以执行旋转、缩放和变换。此外,当用户更改 TextInput 框的内容时,标签的 text 属性也会更新。

事件的录制和重放定义在两个按钮的 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()

输出

应用程序窗口如下所示 -

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'
广告

© . All rights reserved.