Проблемы с python autopy / путаница

Так что я пытаюсь сделать скрипт бота, чтобы, когда определенный шестнадцатеричный цвет был на определенном пикселе, он выполнял некоторый код для перемещения мыши, щелчка и т. д., и у меня он был там, где он снимал скриншот каждую 1 секунду в один и тот же файл PNG и обновляет файл png. У меня есть шестнадцатеричный цвет для печати пиксельных шнуров на консоли, чтобы я мог видеть, обновляется ли он или нет. это никогда не обновляет это, только остается тем же самым. Я пытался написать этот сценарий многими способами, и, к сожалению, у меня есть только одна версия, чтобы показать вам, но, надеюсь, вы поймете, чего я пытался достичь. я на питоне 2.7 кстати. спасибо всем за ваше время!!!!

import autopy
from time import sleep

color_grabber =    hex(autopy.bitmap.Bitmap.open("screen1.png").get_color(292,115))


def color_checker():
    global color_grabber
    color_grabber = color_grabber
    return

def mouse_move_click():
    autopy.mouse.smooth_move(433,320)
    autopy.mouse.click()

def screen_grab():
    autopy.bitmap.capture_screen().save("screen1.png")  

def the_ifs(mouse_move_click):
    if color_checker == "0xffcb05":
        mouse_move_click()

while 1==1:
    sleep(1)
    screen_grab()
    color_checker()
    the_ifs(mouse_move_click)
    print color_grabber

2 ответа

Решение

Я считаю, что ваша проблема в том, как вы используете color_grabber, поговорка color_grabber = color_grabber ничего не делает. В вашем коде происходит то, что когда вы запускаете его, после импорта вы определяете значение color_grabber быть цветом в вашем изображении. Затем выполняется цикл while, и в этом цикле вы вызываете color_checker, Эта функция вводит переменную color_grabber из глобального пространства имен, а затем вы установите эту переменную равной себе. Вы не выполняете команду, которую использовали для определения color_grabber на первом месте. Вы просто сохраняете значение цвета обратно в себя так ясно, что оно не изменится.

У вас также есть проблема в том, как вы вызываете функцию mouse_move_click. Вы не хотите передавать имя функции, так как в этом нет необходимости. Тем не менее, вы также выполнили проверку color_checker == "0xffcb05" который сравнивал вашу функцию (саму функцию, а не возвращаемое значение) с шестнадцатеричным кодом. Это тебе не поможет. Вы хотите сравнить цвет. Решение состоит в том, чтобы передать цвет в the_ifs и используйте этот цвет для сравнения с шестнадцатеричным кодом. Должен отметить, что вам не нужно делать the_ifs в свою собственную функцию. Просто поместите оператор if в свой цикл while. Я оставил это, как у вас это все же.

То, что вы хотите, это что-то вроде этого.

import autopy
from time import sleep

def color_checker():
    color_grabber = hex(autopy.bitmap.Bitmap.open("screen1.png").get_color(292,115))
    return color_grabber

def mouse_move_click():
    autopy.mouse.smooth_move(433,320)
    autopy.mouse.click()

def screen_grab():
    autopy.bitmap.capture_screen().save("screen1.png")  

def the_ifs(color):
    if color == "0xffcb05":
        mouse_move_click()

while 1==1:
    sleep(1)
    screen_grab()
    color = color_checker()
    the_ifs(color)
    print color

Обратите внимание, что я не запускал этот код сам, поэтому я не могу гарантировать, что он работает, но я верю, что он должен.

from autopy.mouse import LEFT_BUTTON
autopy.mouse.click(LEFT_BUTTON)
autopy.mouse.toggle(True, LEFT_BUTTON)
autopy.mouse.toggle(False, LEFT_BUTTON)

Я вижу необходимость делать это в чужом коде, но я не понимаю, почему нужно использовать "вверх" и "вниз" после клика. На самом деле, когда я тестирую в Windows 7, клик эффективен, но не очень корректен, чувствую больше похоже на мою работу

Другие вопросы по тегам