Как сделать мышонка по координатам
Я пытаюсь создать программу, которая позволяет мне рисовать в окне 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
Устанавливаем размер окна браузера в 500×500 пикселей.
Здесь мы делаем последовательность действий.
В итоге, мы нарисовали точку на экране.
Рисуем 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 является 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-ый - боковые кнопки.
Клавиатура
Просто тыкаем, куда нам надо и все, хотя я пользуюсь той клавиатурой что под руками лежит.
Думаю люди знающие ничего нового не найдут, а вот новичкам будет полезно.
Читайте также: