onChange()sikuli的例子

时间:2014-11-08 04:14:25

标签: sikuli

我正在尝试将以下行为编写为sikuli脚本,即使使用文档也无法弄明白。

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

1 个答案:

答案 0 :(得分:2)

我假设你正在使用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)中运行,或者让代码停止直到扫描结束(错误)。

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

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

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

最后拨打reg.stopObserver()

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

Settings.ObserveScanRate = 10
def onchangedFunction(event):
            click(img2)
reg= Region(find(img1).right())
reg.onChange(50,onchangedFunction)
reg.observe(10,background=False)
reg.stopObserver()