Kivy - 输入记录器
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 窗口显示如下 −
点击记录按钮,所有屏幕活动(包括 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'