Kivy 简明教程
Kivy - Multistroke
Kivy 中的多笔势是多个 Gesture 对象的集合。手势构成了由“touch_down”和“touch_up”事件之间的触控点列表构建的单个笔画。多笔势是此类笔画的集合。
“kivy.multistroke”模块实现了量角器手势识别算法。此模块中定义的两个重要类为 MultistrokeGesture 和 Recognizer 。
MultiStrokeGesture 类维持一组笔画并生成手势识别器,这些手势识别器用于稍后针对此手势评估候选项。
使用以下语法来获取 MultiStroke 对象-
from kivy.vector import Vector
from kivy.multistroke import MultistrokeGesture
gesture = MultistrokeGesture('my_gesture', strokes=[
[Vector(x1, y1), Vector(x2, y2), ...... ], # stroke 1
[Vector(), Vector(), Vector(), Vector() ] # stroke 2
#, [stroke 3], [stroke 4], ...
])
即使所有笔触都组合到一个列表(单笔触)中,您仍然应该分别指定笔触,并将 stroke_sensitive 属性设置为 True。
识别器存储 MultistrokeGesture 对象的列表。它是一个与 GestureDatabase 类似的搜索/数据库 API。它维护并允许您在其中搜索用户输入的手势。
识别器数据库是 UnistrokeTemplate 对象的一个容器,并实现堆排列算法来自动生成所有可能的笔划顺序。
候选项类的对象表示用户输入的一组单笔触路径。此对象通过调用 Recognizer.recognize() 自动实例化。
from kivy.vector import Vector
from kivy.multistroke import Recognizer
gdb = Recognizer()
gdb.recognize([
[Vector(x1, y1), Vector(x2, y2)],
[Vector(x3, y3), Vector(x4, y4)]])
识别器对象能够生成这些事件-
-
on_search_start - 当使用此识别器启动新的搜索时激发。
-
on_search_complete - 当正在运行的搜索结束时激发,无论出于何种原因。
这些事件可以映射到回调函数来跟踪识别器.recognize() 方法完成的搜索操作的进度。
gdb.bind(on_search_start=search_start)
gdb.bind(on_search_complete=search_stop)
回调方法的示例如下 -
def search_start(gdb, pt):
print("A search is starting with {} tasks".format(pt.tasks))
def search_stop(gdb, pt):
best = pt.best
print("Search ended {}. Best is {} (score {}, distance {})".format(
pt.status, best['name'], best['score'], best['dist'] ))
最后,“kivy.multistroke”模块还提供一个 ProgressTracker 类。它表示正在进行(或已完成)的搜索操作。
当调用识别器.识别器() 方法时,会自动实例化跟踪器对象并由该方法返回。results 属性是一个在识别操作进行时会更新的字典。
progress = gdb.recognize([
[Vector(x1, y1), Vector(x2, y2)],
[Vector(x3, y3), Vector(x4, y4)]])
progress.bind(on_progress=my_other_callback)
print(progress.progress) # = 0
print(result.progress) # = 1
您可以使用 export_gesture() 函数将多笔触手势保存到文件中。
-
export_gesture(filename=None) - 它将一个 MultistrokeGesture 对象列表导出到一个 base64 编码的字符串中,该字符串可以使用 parse_gesture() 函数解码为一个 Python 列表。它还可以使用 Recognizer.import_gesture() 直接导入到数据库中。如果指定了 filename,输出将写入磁盘。
-
import_gesture(data=None,filename=None) - import_gesture() 函数将手势引入到识别器数据库中。使用此函数导入由 export_gesture() 格式化的一个手势列表。必须指定 data 或 filename 参数。如果未指定此方法,则会接受可选的识别器.筛选() 参数,则会导入指定数据中的所有手势。