Пытаюсь обновить PIL.ImageGrab, но он не работает - PullRequest
1 голос
/ 01 июля 2019

Я пытаюсь создать код, который будет вызывать нажатие кнопки.

Функция сообщит, какая кнопка должна быть нажата. Он проверит, является ли кнопка действительной (от 1 до 4), затем найдет элемент управления навигатором (пользовательский из приложения, которое я пытаюсь автоматизировать, я не могу найти опцию, чтобы заказать его для выполнения определенной), проверьте его цвет соответствует PIL в памяти и, если он действителен, нажмите кнопку и подождите, пока кнопка не изменит цвет, чтобы возобновить код.

from pywinauto import application
import pywinauto
import PIL
import time
from array import *
time.clock()

def sanity_check():
    if 'app' not in globals():
        global app
        app = application.Application()
        app.connect(title="Contas a pagar")
    if 'screen' not in globals():
        global screen
        screen = PIL.ImageGrab.grab()
    if 'colorsarr' not in globals():
        global colorsarr
        colorsarr = [[(36, 210, 71),(82, 94, 105)],[(198, 62, 62),(84, 96, 107)],[(174, 218, 201),(169, 187, 207)],[(229, 13, 0),(64, 73, 81)]]

def update_screen():
    screen = PIL.ImageGrab.grab()

def click_button(number=1):
    if 1 <= number <= 4:
        number = int(number)
        buttonCoord = int((app.Contas_a_pagar.TBDBNavigator2.rectangle().right - app.Contas_a_pagar.TBDBNavigator2.rectangle().left)/4/2), int((app.Contas_a_pagar.TBDBNavigator2.rectangle().bottom - app.Contas_a_pagar.TBDBNavigator2.rectangle().top)/2)
        buttonCoord = app.Contas_a_pagar.TBDBNavigator2.rectangle().left + buttonCoord[0]*(number*2-1),buttonCoord[1]+app.Contas_a_pagar.TBDBNavigator2.rectangle().top
        if screen.getpixel(buttonCoord) == colorsarr[number-1][0]:
            pywinauto.mouse.click(button='left', coords=(buttonCoord))
            while screen.getpixel(buttonCoord) != colorsarr[number-1][1]:
                update_screen()
                continue
            return
        elif screen.getpixel(buttonCoord) == colorsarr[number-1][1]:
            print("Button unavailable")
            return
        else:
            print("Color check button " + str(number))
            return

def automate_things():
    sanity_check()
    print(time.clock())
    for i in range(-3,10):
        click_button(i)
    print(time.clock())

automate_things()

Моя проблема в том, что моя функция update_screen должна изменить то, что хранится в переменной screen, но это не так, делая цикл while бесконечным. Даже если я помещу окно в положение, в котором он захватывает цвет пикселя, оно продолжает получать другой цвет.

Массив colorsarr имеет по индексу 0 цвет "нажимаемый", а по индексу 1 - цвет "несжимаемый"

Это мой первый код на Python, поэтому, вероятно, я что-то не так делаю. Когда закончите, я попробую обзор кода для лучшего кода. Хотя предложения по улучшению кодирования приветствуются, основное внимание уделяется только тому, почему экранная переменная не обновляется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...