← Back to team overview

sikuli-driver team mailing list archive

[Question #215852]: Image changes position

 

New question #215852 on Sikuli:
https://answers.launchpad.net/sikuli/+question/215852

I solved the loop with "while exists" instead of while not exists as proposed, however I am stuck a bit as surfbar changes position randomly. It's at the top, then could be at the bottom of the screen or vice versa. what changes do I need to do? Does it have something to do with the region?

Here is what I have and loops perfectly however it is searching the same previous location it found the surfbar on last run.

# --------------------------------------------
# functions to be used in different situations
def captureSymbol(i = 0):
    r = other[i]
    x = r.x + sbMarginLeftRight
    w = r.w - 2 * sbMarginLeftRight
    y = r.y + sbMarginTopBottom
    h = r.h - 2 * sbMarginTopBottom
    r = Region(x, y, w, h)
    r.highlight(1)
    return capture(r)

def captureLeftSmallest():
    # capture the image to search
    # we have to try to get the smallest capture possible
    # since the probe and the target have different positions
    # this can be set fixed, if it is always the same
    # find the bottom of image
    greyBelow = "1354183324452.png"
    g = left.find(greyBelow)
    #g.highlight(1)
    while True:
        g1 = g.above(sbHeight-g.y)
        g1.x -= 4; g1.w += 8
        g1 = g1.exists(greyBelow)
        if not g1: break
        g = g1
    #g.highlight(1)
    b = g.y

    # find the left side of image
    greyLeft = "1354183672313.png"
    g = left.find(greyLeft)
    #g.highlight(1)
    while True:
        g1 = g.right(left.w - g.x)
        g1.y -= 4; g1.h += 8
        g1 = g1.exists(greyLeft)
        if not g1: break
        g = g1
    #g.highlight(1)
    l = g.x + g.w

    # define the smallest possible image region
    symbol = Region(l, b - 60, 50, 60)
    #symbol.highlight(3)
    return capture(symbol)

def checkCells(imgSymbol, start = 0):
    # find the cell containing the symbol
    match = None
    for i in range(start, len(other)):
        if other[i].exists(imgSymbol, 0):
            match = other[i]
            break
    if not match: return None
    match.highlight(1)
    return match
# end function area
# ------------------------------------------------------------


# ----------------------- start of main workflow -------------

# this is based on surfbar9
# to run this script, surfbar9 must be visible on the screen

#Wait for counter on Surfbar to reach Zero
wait(10)

#Mouse speed
Settings.MoveMouseDelay = 0
# find the position
imgBase = "1354267496167-1.png"
fix = find(imgBase)
fix.highlight(1)

# get the symbol
rsym = Region(fix.x + fix.w + 8, fix.y + 14, 35, 35)
symbol = capture(rsym)
rsym.highlight(1)

# get the surfbar
sbLeft = fix.right().find("1354267650780.png")
sbLeft.highlight(1)

sbHeight = 45
sbWidth = 330
sb = Region(sbLeft.x + 4, sbLeft.y + 3, sbWidth, sbHeight)
sb.highlight(1)

sbMarginTopBottom = 20
sbMarginLeftRight = 20

# setup the regions for the others
numCells = 4
oWidth = (sb.w)/4
other = []
for i in range(numCells):
    x = sb.x + i*oWidth - 4
    other.append(Region(x, sb.y, oWidth+8, sbHeight))
for r in other:
    pass
    r.highlight(1)

while exists(imgBase, 0):
    symbol = capture(rsym)
    # rsym.highlight(1)
    found = checkCells(symbol)
    if not found: print "not found"; exit(1)
    click(found)
    wait(10)

-- 
You received this question notification because you are a member of
Sikuli Drivers, which is an answer contact for Sikuli.