几小时前我刚刚进入Python(Jython)编码,我正在尝试使用Sikuli IDE自动化Kik messenger(使用Android模拟器)。
我正在尝试创建一个扫描更改的区域观察器,如果进行了更改,它将检查是否找到任何命令。我不确定我在做什么,但这是我在网络和文档中得到的一些帮助的代码:
cmdScanLoc = Region(Region(65,762,167,59))
def cmdHelp():
type("Help")
type(Key.ENTER)
cmdScanLoc.stopObserver()
def cmdPing():
type("Pong.")
type(Key.ENTER)
cmdScanLoc.stopObserver()
def changeDetected(event):
print("Change")
if cmdScanLoc.exists("1440090739688.png"):
cmdHelp()
elif cmdScanLoc.exists("1440090725124.png"):
cmdPing()
else:
print("No Command Found")
def startObserver():
cmdScanLoc.onChange(50,changeDetected)
cmdScanLoc.observe(10,background=False)
Settings.ObserveScanRate = 10
startObserver()
输入后,这是日志!ping:
Change
!help
[log] TYPE "Help"
[log] TYPE "#ENTER."
似乎要转到cmdHelp()
,即使我输入了!ping。怎么可能?它完全忽略了if
- 声明。
这是我正在扫描的区域的图像: http://i.imgur.com/QAP9OnV.png 以及我扫描的图像的图像: http://i.imgur.com/wXxphQN.png (此图片中的代码不再准确,如您所见)
如果有人能用这个"命令扫描仪指导我正确的方向,我将不胜感激。如果检测到某个命令,则调用适当的函数。
非常感谢,如果这是一个非常愚蠢的问题,我很抱歉,我只是花了好几个小时,查找Sikuli和Python的文档,我只是无法让它工作...
答案 0 :(得分:0)
使用区域观察者而不是使用if
语句来做这种事情要聪明得多,速度要快得多。示例代码:
def cmd1(event):
print("Command One")
event.cmdRegion.stopObserver()
waitCmdAppear()
def cmd2(event):
print("Command Two")
event.cmdRegion.stopObserver()
waitCmdAppear()
def cmd3(event):
print("Command Three")
event.cmdRegion.stopObserver()
waitCmdAppear()
def waitCmdAppear():
cmdRegion.onAppear(Pattern("1.png").exact(), cmd1)
cmdRegion.onAppear(Pattern("2.png").exact(), cmd2)
cmdRegion.onAppear(Pattern("3.png").exact(), cmd3)
cmdRegion.observe(FOREVER)
waitCmdAppear()
不要忘记的事情:
region.onAppear([PS], [handler])
)键入处理程序(例如cmd3
)而非函数(例如cmd3()
)我希望这会有助于其他人。 :)