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.