2015-08-20 9 views
0

Я только что получил кодировку Python (Jython) несколько часов назад, и я пытаюсь автоматизировать Kik messenger (используя эмулятор Android) с использованием Sikuli IDE.Python - код игнорирует `if`-statement?

Я пытаюсь сделать наблюдателя области, который сканирует изменения, если внесено изменение, он проверяет, найдены ли какие-либо команды. Я не совсем уверен, что я делаю, но это код, который я получил с некоторой помощью все вокруг веб и документаций:

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

Вот журнал, после ввода пинг:

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

Итак, я все еще пытаюсь заставить эту работу работать долгое время, и это кажется слишком неустойчивым (кажется, полностью игнорирует оператор 'if' и переходит непосредственно к' cmdHelp() ', когда наблюдается изменение.) Прошу вас, опытные программисты python/jython, привести меня к лучшему методу делать такие вещи. :) Заранее спасибо! – SikuliXUser

+1

Вероятно, это не игнорирует оператор 'if', это, вероятно,' cmdScanLoc.exists ("1440090739688.png") ', который оценивает что-то истинное. – skyking

+0

Я не знаю, почему я получил downvoted, потому что я сделал много исследований, и вопрос кажется мне совершенно понятным. Я даже добавил изображения, чтобы сделать их еще более ясными ... если бы человек, который подавил меня, мог дать мне конструктивную критику, это было бы намного лучше. – SikuliXUser

ответ

0

Это гораздо умнее и гораздо быстрее, чтобы делать подобные вещи с наблюдателем региона, чем с помощью if -statement. Пример кода:

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. The (событие) часть при определении функции, которая будет вызвана области наблюдателя.
  2. Остановка наблюдателя в случае, даже если вам понадобится его снова. Просто перезапустите его.
  3. В onAppear (region.onAppear([PS], [handler])) введите обработчик (напр. cmd3) не функция (напр. cmd3())

Я надеюсь, что это поможет другим людям. :)

+0

Отредактировал свой ответ, поскольку был намного лучший способ сделать это. Надеюсь, я помогу кому-нибудь в этом. :) – SikuliXUser