Python - 代码忽略 `if` 语句?

Python - Code ignores `if`-statement?

几个小时前我刚刚接触 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-statement.

这是我正在扫描的区域的图像: http://i.imgur.com/QAP9OnV.png 以及我正在扫描的图像的图像: http://i.imgur.com/wXxphQN.png (如您所见,此图中的代码不再准确)

如果有人能用这个 "command scanner" 指导我正确的方向,我将不胜感激,如果检测到某个命令,则会调用适当的函数。

提前致谢,抱歉,如果这是一个非常菜鸟的问题,我已经尝试了好几个小时,查找 Sikuli 和 Python 的文档,但我就是无法理解工作...

用区域观察器做这种事情比用 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()

我希望这对其他人有所帮助。 :)