Kivy - 输入记录器

创建于 2024-12-03 / 21
字体: [默认] [大] [更大]

Kivy 框架中的 Recorder 类的功能仍在开发中,仍处于实验阶段。Recorder 对象记录输入事件,例如触摸事件、按键事件和点击事件。它们记录在扩展名为".kvi"的文件中。Kivy 使用此文件并通过生成等效的假事件重播事件并将其分派到事件循环。

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

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

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

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

按 F7 重播事件。

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

要开始录制 −

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

示例

在下面给出的代码中,将标签添加到 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()

输出

App 窗口显示如下 −

Kivy 输入记录器

点击记录按钮,所有屏幕活动(包括 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'


0 人点赞过