2014-11-08 4 views
2

다음과 같은 동작을 sikuli 스크립트에 코딩하려고하고 있는데, 문서에서도이 동작을 알아낼 수 없습니다.onChange() sikuli의 예

화면에서 무엇인가를 찾고 싶습니다 (실제로는 텍스트입니다). 그런 다음 텍스트가 오른쪽으로 바뀌면 키 입력 동작을 수행합니다. 나는 onChange()observer()뿐만 아니라 find().right()을보고 지역을 정의했습니다. 문서들을 함께 모으기 위해서는 문서를 제대로 이해하지 못합니다.

답변

2

저는 Sikuli IDE와 jython에서의 쓰기를 사용하고 있다고 가정합니다.

우선 작은 영역을 사용해보십시오. find().right()은 다소 큰 영역을 만듭니다 (화면 끝까지 확장 됨). 새로 생성 된 영역의 작은 크기를 지정하여 계산 능력을 낮추면 도움이 될 수 있습니다. 관찰자를 사용할 때.

둘째, 관찰자에게 필요한 스캔 속도를 지정하고 (효율성 및 계산에 필요한 전력에 영향을 미침) 스크립트의 시작 부분에있는 설정은 관찰 된 영역에서 수행되는 초당 스캔 수를 정의합니다. 코드 줄은 다음과 같습니다 : Settings.ObserveScanRate = 10, 이것은 초당 10 회의 스캔을 수행합니다.

는 그런 다음 예를 들어있는 관찰자 시작하는 두 줄의 코드 해주기. reg.onchange(50,onchangedFunction) 50 reg.onChange(50,onchangedFunction)reg.observe(10,background=False)

가 변경되면 함수 onchangedFunction 구현 될 것이라는 픽셀 수를, (50은 가능한 가장 작은 수이며, 텍스트의 변경을 감지 할 때 사용하는 것이 좋습니다)

reg.observe(10,background=False)의 경우 변경 사항을 감지하기위한 영역을 관찰하기 시작합니다. 10은 시스템이 감지 한 시간 지역을 관측하고 두 번째 인수는 true 또는 false인지 여부 background(true)에서 스캔을 실행하거나 스캔이 끝날 때까지 코드가 중지되도록 (거짓)합니다.

def onchangedFunction(event): 
     click(img) #and the rest of the algorithm to be implemented on change 

을하지만 reg.onchange()하여 사용하기 전에해야하는 기능의 구현으로 돌봐 :

는 다음 기능 onchangedFunction (이 그냥 이름) 구현해야합니다,이 같이 갈 수도 그것이 호출 될 수있는 범위에서.

Settings.ObserveScanRate = 10 
def onchangedFunction(event): 
      click(img2) 
reg= Region(find(img1).right()) 
reg.onChange(50,onchangedFunction) 
reg.observe(10,background=False) 
reg.stopObserver() 
+0

확인, 내가 이전에 코딩이 있었는지와 올바른 트랙에 있던 :

마지막으로 reg.stopObserver()

난 당신이 코드 같은 것을해야한다고 생각 호출합니다. 그러나, 나는 당신의 예제에 따라 최소한의 예제를 코딩 할 때'ClassCastException'을 얻는다 :'[error] java.lang.ClassCastException (java.lang.ClassCastException : org.python.core.PyFunction은 org.sikuli로 형변환 될 수 없다. script.SikuliEventObserver)'를 호출하십시오. 이것은 onChange()를 호출하는 라인에서 발생한다. –

+0

@ NathanS.Watson-Haigh find()의 반환 값이 지역 객체가 아닌 일치이기 때문입니다. 이것은 단순히 reg = find (img1) .right()를 reg = Region (find (img1) .right())로 바꾸면 해결할 수 있습니다. –