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()
不要忘记的事情:
- 定义将由区域观察器调用的函数时的(事件)部分。
- 在事件中停止观察者,即使您将再次需要它。只需重新启动即可。
- 在 onAppear 中,(
region.onAppear([PS], [handler])
) 键入处理程序(例如 cmd3
)而不是函数(例如 cmd3()
)
我希望这对其他人有所帮助。 :)
几个小时前我刚刚接触 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()
不要忘记的事情:
- 定义将由区域观察器调用的函数时的(事件)部分。
- 在事件中停止观察者,即使您将再次需要它。只需重新启动即可。
- 在 onAppear 中,(
region.onAppear([PS], [handler])
) 键入处理程序(例如cmd3
)而不是函数(例如cmd3()
)
我希望这对其他人有所帮助。 :)