Python - 代码忽略了`if`-statement?

时间:2015-08-20 15:49:54

标签: python python-2.7 if-statement sikuli observers

几小时前我刚刚进入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的文档,我只是无法让它工作...

1 个答案:

答案 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()

不要忘记的事情:

  1. 定义将由区域观察者调用的函数时的(事件)部分。
  2. 在事件中停止观察者,即使您将再次需要它。只需重新启动它。
  3. 在onAppear中,(region.onAppear([PS], [handler]))键入处理程序(例如cmd3)而非函数(例如cmd3()
  4. 我希望这会有助于其他人。 :)