Как сделать мышонка по координатам

Добавил пользователь Владимир З.
Обновлено: 10.09.2024

Я пытаюсь создать программу, которая позволяет мне рисовать в окне tkinter, используя turtle. По какой-то причине я не могу получить абсолютные координаты мыши.

Я сделал root.winfo_pointerx() - root.winfo_rootx() (и vrootx ). Я также попробовал:

Я хочу, чтобы курсор находился сверху стрелки, но вместо этого он всегда направо и вниз. Кроме того, когда я перемещаю мышь вверх, стрелка перемещается вниз, и наоборот.

3 ответа

Тщательно продумайте, как установить setworldcoordinate (). -500 - 500 означает, что ваш мир имеет размер 1000, а размер окна - 500. Кроме того, указатель мыши смещен относительно корня окна - следует использовать обе абсолютные координаты. Вы перепутали абсолютные координаты - указатель мыши и vrootx, которые находятся в разных масштабах, поэтому расстояние в два не имеет смысла. Следующий код, вероятно, ближе к тому, что вы хотели. Обратите внимание, что я установил мировую координату в соответствии с абсолютными координатами смещения указателя мыши от верхнего / левого угла окна.

Самостоятельная проблема заключается в том, что, когда вы находитесь в быстродвижущемся обработчике событий, вам нужно отключить обработчик событий как первое, что вы делаете, снова включив его при выходе. В противном случае события перекрываются, и случаются плохие вещи. (Непроизвольные рекурсии и другие странности.)

Я переписал вашу программу ниже, чтобы она работала так, как вам кажется. Исправление добавляет метод отсутствующей черепахи, чтобы мы могли оставаться в области черепах:

Думал что закончил с Selenium, как выяснилось нет. Поэтому выйдет еще пару статей по данной библиотеке.

Предисловие.

В данном уроке мы научимся кликать по координатам окна с помощью Selenium. Данная возможность будет полезна, при написании ботов для онлайн игр.

Приступаем.

Для работы с мышью нам потребуется модуль ActionChains.

ActionChains — это модуль позволяющий производить низкоуровневые операции такие как:

При вызове методов класса ActionChains, методы помещаются в очередь. Вызываются они методом perform(), в порядке очереди. Подробнее в документации.

Рисуем точку на экране.

Перепишите следующий код:

Сохраните данный код, поместив в одной папке с chromedriver.exe (браузер Google Chome должен быть установлен). Разберем код.

Импортируем ActionChains

Устанавливаем размер окна браузера в 500x500 пикселей.

Здесь мы делаем последовательность действий.

В итоге, мы нарисовали точку на экране.


Рисуем 2 точки на экране.

Добавьте следующие строки к себе в код:

Здесь, мы сбросили положение курсора reset_actions(), теперь положение равно 0,0. Затем, кликнули по координатам (250, 300) тем самым, нарисовав точку на холсте.


Чертим линию на экране.

Удалите предыдущие вызовы ActionChains, и добавьте следующий.

Разберем каждое действие:

  • move_by_offset(250, 250) — передвигаем курсор на координаты 250, 250
  • click_and_hold() — зажимаем ЛКМ
  • move_by_offset(20, 20) — двигаем курсор на 20 пикселей вправо, и 20 вниз, на координаты 270, 270.
  • perform() — выполняем все действия.

В итоге, получилась диагональная линия.


Заключение

Используя ActionChains, можно написать бота, практически, для любой игры.

Всем привет!
У меня есть длинный код, который выполняет следующие функции: начинает двигать курсор мыши от координат экрана 600 пикселей по горизонтали и 120 по вертикали вплоть до 1470 по горизонтали (попутно выполняя код), затем возвращается на 600 пикселей по горизонтали, но опускается на 10 пикселей ниже (130 по вертикали) и так далее. То есть скрипт двигает мышь по экрану в пределах координат от 600 до 1470 по горизонтали и от 120 до 980 по вертикали (при опускании каждый раз проходит строку по горизонтали).
Прошу вашей помощи в оптимизации этого кода, чтобы он не занимал так много места.

2 Ответ от ypppu 2016-10-20 13:00:00











Как создать цикл - прочитайте в справке про оператор LOOP. Если смещения курсора поддаются какой-то формуле, то нужно эту формулу поместить в цикл, периодически увеличивая / уменьшая значения переменных. Координаты для команды MouseMove брать из этих переменных (для этого обрамить имя переменной знаком процента).

Управляем курсором мыши в Python

Одним из инструментов автоматизации задач на компьютере являются программы, которые напрямую управляют клавиатурой и мышью. Эти программы могут управлять другими приложениями, посылая им виртуальные нажатия клавиш и щелчки мыши, просто - как если бы вы сидели за своим компьютером и сами взаимодействовали с приложениями. Этот метод известен как автоматизация графического интерфейса пользователя.

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

Таким модулем в Python является PyAutoGUI.

Установим его командой:

В зависимости от того, какую операционную систему вы используете, вам может потребоваться установить некоторые другие модули (так называемые зависимости), прежде чем мы сможем установить PyAutoGUI.

В Windows следующие действия пропускаем.

В OS X запустите sudo pip3 install pyobjc-framework-Quartz, sudo pip3 install pyobjc-core, а затем sudo pip3 install pyobjc.

В Linux запустите sudo pip3 install python3-xlib, sudo apt-get install scrot, sudo apt-get install python3-tk и sudo apt-get install python3-dev. (Scrot - это программа для создания снимков экрана, которую использует PyAutoGUI.)

После установки этих зависимостей запустите pip install pyautogui (или pip3 в OS X и Linux), чтобы установить PyAutoGUI.

Мы можем заставить сценарий ждать после каждого вызова функции, что даст время для управления мышью и клавиатурой, если что-то пойдет не так. Для этого установим переменную pyautogui.PAUSE на количество секунд, на которое мы хотим, чтобы она приостанавливалась.Например, после установки pyautogui.PAUSE = 1.5 каждый вызов функцииPyAutoGUI будет ждать полторы секунды после выполнения своего действия. Инструкции, не относящиеся к PyAutoGUI, не будут иметь этой паузы.

PyAutoGUI также имеет отказоустойчивую функцию. Перемещение курсора мыши в верхний левый угол экрана приведет к тому, что PyAutoGUI вызовет исключение pyautogui.FailSafeException. Ваша программа может либо обработать это исключение с помощью операторов try и except, либо позволить исключению привести к сбою вашей программы. В любом случае функция отказоустойчивости остановит программу, если вы быстро переместите мышь как можно дальше вверх и влево. Мы можем отключить эту функцию, установив pyautogui.FAILSAFE = False. Введите в интерактивную оболочку следующее:

Управление движением мыши

Прежде чем вы узнаете, как перемещать мышь и отслеживать ее положение на экране с помощью PyAutoGUI, давайте сначала разберемся, как PyAutoGUI работает с координатами.

Функции мыши PyAutoGUI используют координаты x и y. Начало координат, где x и y равны нулю, находится в верхнем левом углу экрана. Координаты x увеличиваются при движении вправо, а координаты y увеличиваются при движении вниз. Все координаты - целые положительные числа; отрицательных координат нету.

Разрешение - это высота и ширина экрана в пикселях. Если разрешение вашего экрана установлено на 1366 / 768, то координата для левого верхнего угла будет (0, 0), а координата для правого нижнего угла будет (1366, 768).

Функция pyautogui.size() возвращает кортеж из двух целых чисел ширины и высоты экрана в пикселях. Введем в интерактивную оболочку следующее:


>>> import pyautogui
>>> pyautogui.size()


>>> width, height = pyautogui.size()

Перемещение мыши

Теперь, когда мы разобрались с координатами экрана, давайте переместим мышь. Функция pyautogui.moveTo() мгновенно переместит курсор мыши в указанную позицию на экране. Целочисленные значения координат x и y составляют первый и второй аргументы функции соответственно. Необязательный аргумент целочисленного значения длительности или ключевого слова с плавающей запятой указывает количество секунд, необходимое для перемещения мыши к месту назначения. Если вы его не укажете, по умолчанию будет 0 для мгновенного движения. Все аргументы ключевого слова duration в функциях PyAutoGUI являются необязательными. Введем в интерактивную оболочку следующее:


>>> import pyautogui
>>> for i in range(10):
pyautogui.moveTo(100, 100, duration=0.25)
pyautogui.moveTo(200, 100, duration=0.25)
pyautogui.moveTo(200, 200, duration=0.25)
pyautogui.moveTo(100, 200, duration=0.25)

Функция pyautogui.moveRel() перемещает курсор мыши относительно его текущей позиции.В следующем примере мышь перемещается по тому же квадратному шаблону, за исключением того, что он начинает квадрат с того места, где мышь оказывается на экране, когда запускается код:


>>> import pyautogui
>>> for i in range(10):
pyautogui.moveRel(100, 0, duration=0.25)
pyautogui.moveRel(0, 100, duration=0.25)
pyautogui.moveRel(-100, 0, duration=0.25)
pyautogui.moveRel(0, -100, duration=0.25)

Получение координат мыши

Также мы можем определить текущее положение мыши, вызвав функцию pyautogui.position(), которая вернет кортеж позиций курсора мыши по x и y во время вызова функции. Введите в интерактивную оболочку следующее, перемещая мышь после каждого вызова:

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


Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

Она выглядит вот так:

Комментарии ( 0 ):

Я писал вам готовые макросы на автокач и подобные мелочи, теперь же я расскажу как с помощью мыши модели a4tech x7 создаются макросы.

Условия и задачи

К этой категории относятся:

Теперь кнокретнее обо всем этом.


Задача LOOP дает нам возможность повторить, что-либо несколько раз, а так же перейти к определенной строке.

Начало - с какой строки начинать.

Конец - где заканчиваем.

Кол-во - сколько раз повторить.

Перейти к инструкции

Перейти к строке №: X - Переход к строке X.


Условие KEY дает нам возможность подогнать макрос хоть как то к изменяющимся условиям.

If the state of key X is нажата/отмененная then jump to line no: Y - то есть если кнопка X нажали или отпустили совершается переход на строку Y.


Условие if дает нам возможность вести некий отсчет, сравнивая переменные с переменными, переменные с определенными числами.

If variable X ==/=! Y then jump to line no: Z - то есть если переменная X ==/=! Y то переходим на строку Z.

If variable X==/=! variable Y then jump to line no: Z - то есть если переменная X ==/=! переменной Y то переходим на строку Z

Прим. - == означает равно, =! означает не равно.


Управление переменными, которые используются в условии IF.

Variable X = Y - присвоение переменной X значения Y.

Variable X = Variable Y - присвоение переменной X значение переменной Y.

Variable X = Variable X/Y + Z - присвоение переменной X значение переменной X/Y + Z.

Контроль времени


отображать время нажатия кнопки - Отображение паузы после нажатия.

Отображ время отпущ кнопки - Отображение паузы после отпущения кнопки.

единица измер время - то есть тут устанавливается пауза между нажатием/отпущением кнопки, а так же просто выставляются паузы.

Это не та мышь, которая син из под инвиза.


мышь абс координаты (X, Y) - переход к указанным координатам, что бы долго не вымерять есть там такая белая штука, перетаскиваем ее в нужное место и тыкаем добавить.

мышь отн координаты (X, Y) - переход к указанным координатам если текущее положение мыши принимать как 0, 0.

  • влево - ЛКМ (левая кнопка мыши).
  • вправо - ПКМ (правая кнопка мыши).
  • средний - СКМ (средняя кнопка мыши, колесико).
  • вперед - прокрутка колесика в перед.
  • назад - прокрутка колесика назад.
  • 4-ый, 5-ый - боковые кнопки.

Клавиатура


Просто тыкаем, куда нам надо и все, хотя я пользуюсь той клавиатурой что под руками лежит.

Думаю люди знающие ничего нового не найдут, а вот новичкам будет полезно.

Читайте также: