onChange()sikuli的例子

onChange() Example for sikuli

我正在尝试将以下行为编码为sikuli脚本,并且似乎无法弄清楚,即使使用文档。

我想在屏幕上找到一些东西(这实际上是文本)然后在右边的文本发生变化时执行击键动作。 我一直在寻找find().right()来定义一个区域以及onChange()observer(); 但是为了将它们组合在一起,并没有真正理解文档。


我假设你正在使用Sikuli IDE并在jython中编写。

首先,尝试使用较小的区域,因为find().right()将创建一个大的区域(延伸到屏幕的末尾),如果为新创建的区域指定较小的尺寸以降低使用时的计算能力,则可能会有所帮助一个观察者。

其次,指定观察者所需的扫描速率(也影响效率和计算所需的功率),脚本开头的设置定义了对观察区域每秒执行的扫描数。代码行如下:Settings.ObserveScanRate = 10,这将每秒进行10次扫描。

然后,您编写两行代码来启动观察者,例如:
reg.onChange(50,onchangedFunction)reg.observe(10,background=False)

对于reg.onChange(50,onchangedFunction) 50是更改时的像素数,将实现函数onchangedFunction。(50是可能的最小数量,您可能希望在检测文本更改时使用它)

对于reg.observe(10,background=False),这里你开始观察区域是否有任何要检测的变化,10是系统观察区域的秒数,第二个参数是true或false,无论你是否希望扫描在background(true)或代码停止直到扫描结束(false)。

那么你需要实现函数onchangedFunction(这只是一个名字),它可能是这样的:

1
2
def onchangedFunction(event):
        click(img) #and the rest of the algorithm to be implemented on change

但请注意,因为函数的实现应该在reg.onchange()之前使用它并在允许它被调用的范围内。

最后调用reg.stopObserver()

我认为你的代码应该是这样的:

1
2
3
4
5
6
7
Settings.ObserveScanRate = 10
def onchangedFunction(event):
            click(img2)
reg= Region(find(img1).right())
reg.onChange(50,onchangedFunction)
reg.observe(10,background=False)
reg.stopObserver()