grid coords? очередной даунизм где я brainfart-нул

copypaste_scripter

Известный
Автор темы
1,296
249
крч сразу к делу

Python:
import time
from pynput.mouse import Button, Controller
from pynput.keyboard import Key, Listener

mouse = Controller()

from myvars import*

meow = [
    [1750, 50, 1]
]

woof = [
    #[x coord, y coord, var]
    [100, 500, apple] # в файлу откуда берется этот apple указан что он равен 4
]

def on_press(key):
    try:

        if key == Key.f4:
            for kitties in meow:
                mouse.position = (kitties[0], kitties[1])
                time.sleep(0.2)
                mouse.click(Button.left, kitties[2])
                time.sleep(0.2)

        elif key == Key.f5:
            for puppies in woof:
                mouse.position = (puppies[0], puppies[1])
                time.sleep(0.2)
                mouse.click(Button.left, puppies[2])
                time.sleep(0.2)

    except AttributeError:
        return False

with Listener(on_press=on_press) as listener:
    listener.join()


вот короче как я могу сделать чтобы при проходе по таблицу "woof" при значении "apple" 4 кликнул по этому "домофону" на "Е". (там учтен что числа идут от 0, а не с 1)

типо расстояние между кнопками домофона 150 пикселей. я понял что надо

XcoordA + apple*150
YcoordA + apple*150

но из за неровной расположении кнопок чет не получается + мои мозг и iq не хватает на такое (НАДО БЫЛО МАТЕМАТИКУ УЧИТЬ ЛУЧШЕ) или выпить анти-склерозные таблетки

я бы с радостью выучил но вся программирование не интересно + нет на столько сил и возможности (сдвг)
а про эту тему я не знал как гуглить/спросить у чат жопате

1733589347483.png



жду ваших слов
 
Решение
Распиши подробнее, что надо
если вам интересно вот решение:

xPos = X + ( ( a % b ) * c )
где X это начальная позиция по Х, a это переменная 0-9 (10 в моем случии, т.к. 9 получается под G а надо под H), b это делитель (3 столб), c это расстояние по Х (150)

yPos = Y + ( ( a // b ) * d )
где y это начальная позиция по y, a это переменная 0-9 (10 в моем случии, т.к. 9 получается под G а надо под H), b это делитель (3 столб), d это расстояние по У (150)

% это символ который означает остаток от деления -- пример: 5%2 = 1 пример2: 20%15 = 5
// это символ целых чисел от деления -- пример 5//2 = 2 пример2: 20//15 = 1

сори за такой крывой русский, и термины тоже

позиция Х для кнопки E = 100 + ( ( 4 % 3 ) * 150 ) = 100 +...

Ну погоди!

Активный
162
56
Не сильно понял твоих мыслей, закинув промт в ChatGPT, получил следующее:
Код:
import time
from pynput.mouse import Button, Controller
from pynput.keyboard import Key, Listener

mouse = Controller()

# Базовые координаты (начало домофона)
XcoordA = 100  # Базовый X
YcoordA = 500  # Базовый Y

# Расстояния между кнопками
x_offset = 150  # Горизонтальное расстояние
y_offset = 150  # Вертикальное расстояние

# Таблица с данными
woof = [
    # [x coord, y coord, var]
    [XcoordA, YcoordA, 4]  # `4` здесь — значение apple
]

def on_press(key):
    try:
        if key == Key.f4:
            # Логика для "meow" остаётся
            for kitties in meow:
                mouse.position = (kitties[0], kitties[1])
                time.sleep(0.2)
                mouse.click(Button.left, kitties[2])
                time.sleep(0.2)

        elif key == Key.f5:
            for puppies in woof:
                # Берём координаты из таблицы
                base_x, base_y, apple = puppies

                # Рассчитываем новые координаты
                new_x = base_x + apple * x_offset
                new_y = base_y + apple * y_offset

                # Кликаем
                mouse.position = (new_x, new_y)
                time.sleep(0.2)
                mouse.click(Button.left, 1)  # 1 клик
                time.sleep(0.2)

    except AttributeError:
        return False

with Listener(on_press=on_press) as listener:
    listener.join()
Распиши подробнее, что надо
 

0Z0SK0

Участник
41
17
пасиб но такое не поможет. надо именно клик по координатам
Так сделай распознавание текста по экрану, и кликай по координатам

Python:
import easyocr
import cv2
import numpy as np
import pyautogui

reader = easyocr.Reader(['en'])

while True:
    screenshot = pyautogui.screenshot()
    screenshot = cv2.cvtColor(np.array(screenshot), cv2.COLOR_RGB2BGR)

    results = reader.readtext(screenshot)

    for (bbox, text, prob) in results:
        text = text.strip().upper()
        if text == "A":
            print(0)
        elif text == "B":
            print(1)
 

0Z0SK0

Участник
41
17
дело в том, что там не текст, там картинки
Скинь скриншот хотя бы что там вообще

дело в том, что там не текст, там картинкиПосмотреть вложение 259117
Python:
import cv2
import numpy as np
import pyautogui

pattern_image = cv2.imread('pattern.png')  # путь к картинке кнопки

while True:
    screenshot = pyautogui.screenshot()
    screenshot = cv2.cvtColor(np.array(screenshot), cv2.COLOR_RGB2BGR)

    result = cv2.matchTemplate(screenshot, pattern_image, cv2.TM_CCOEFF_NORMED)

    if np.any(result >= 0.8):
        print("founded")
 
  • Нравится
Реакции: copypaste_scripter

copypaste_scripter

Известный
Автор темы
1,296
249
Скинь скриншот хотя бы что там вообще


Python:
import cv2
import numpy as np
import pyautogui
import time

pattern_image = cv2.imread('pattern.png')  # путь к картинке кнопки

while True:
    screenshot = pyautogui.screenshot()
    screenshot = cv2.cvtColor(np.array(screenshot), cv2.COLOR_RGB2BGR)

    result = cv2.matchTemplate(screenshot, pattern_image, cv2.TM_CCOEFF_NORMED)

    if np.any(result >= 0.8):
        print("founded")
спасибо, но это решает данную проблему только. в дальнейшем придется еще искать выход. лучше сразу щас. как то надо по координатам кликать без найденной картинки
 

copypaste_scripter

Известный
Автор темы
1,296
249
Распиши подробнее, что надо
если вам интересно вот решение:

xPos = X + ( ( a % b ) * c )
где X это начальная позиция по Х, a это переменная 0-9 (10 в моем случии, т.к. 9 получается под G а надо под H), b это делитель (3 столб), c это расстояние по Х (150)

yPos = Y + ( ( a // b ) * d )
где y это начальная позиция по y, a это переменная 0-9 (10 в моем случии, т.к. 9 получается под G а надо под H), b это делитель (3 столб), d это расстояние по У (150)

% это символ который означает остаток от деления -- пример: 5%2 = 1 пример2: 20%15 = 5
// это символ целых чисел от деления -- пример 5//2 = 2 пример2: 20//15 = 1

сори за такой крывой русский, и термины тоже

позиция Х для кнопки E = 100 + ( ( 4 % 3 ) * 150 ) = 100 + ( 1 * 150 ) = 250
позиция Y для кнопки E = 500 + ( ( 4 // 3 ) * 150 ) = 500 + ( 1 * 150 ) = 650


mouse.position = ( myvars[0] + ( ( myvars[2] % myvars[5] ) * myvars[3] ), myvars[1] + ( ( myvars[2] // myvars[5] ) * myvars[4] ) )