#python #python-3.x #mouse #pyautogui #mousemove
Вопрос:
У меня есть метки классов и координаты (x,y), я хочу управлять основными операциями мыши на основе этого. До сих пор я могу выполнять такие операции, как перемещение мыши, один щелчок (левая кнопка мыши), двойной щелчок и щелчок правой кнопкой мыши. Проблема, с которой я сталкиваюсь, заключается в том, что курсор перемещается в абсолютное положение, но я хочу, чтобы он переместился с последней позиции. вот функция:
import mouse as m
def OperateMouse(mX,mY,sW,sH,classLabl):
if classLabl == "Close":
print("Close Sign Detected... Exiting")
return False
if classLabl == "Move":
#mX = sW ((mX - (sW/2))*sW/(sW/2)-(sH/2))
m.move(mX,mY)
elif classLabl == "SC":
m.click(button='left')
elif classLabl == "T_DC":
m.double_click(button='left')
elif classLabl == "RC":
m.right_click()
Здесь mX и mY-это координаты, которые я получаю из окна вывода, которое составляет половину размера экрана, sW и sH-ширина и высота экрана.
Я также попробовал pyautogui перед использованием мыши.
вот модификация, которую я попробовал:
lX, lY = pyautogui.position()
print("Last Pos:" , lX, lY)
print("Curnt Pos:" , mX, mY)
print("Diff = " , mX-lX, mY-lY)
nX, nY = mX-lX, mY-lY
mX, mY = mX nX, mY nY
#m.move(mX-lX, mY-lY)
try:
pyautogui.move(mX,mY)
if pyautogui.failSafeCheck():
raise pyautogui.FailSafeException()
except:
print("FailSafe Exception")
не работает, возникает отказоустойчивое исключение, когда оно переходит в правый нижний угол
Комментарии:
1. Расширьте свою программу, чтобы она отслеживала положение мыши. Например, после первого
m.move(mX,mY)
код может хранить значенияmX
иmY
. Затем, чтобы выполнить относительное перемещение, рассчитайте новое положение, добавив смещение к предыдущему.2. @BoarGules Я пытался это сделать, но он просто прыгает в угол, так как постоянно меняется в режиме реального времени
3. Не используйте ответ, чтобы изменить свой вопрос. Вместо этого отредактируйте исходный вопрос. Смотрите флаг ссылки Поделиться Редактировать Следовать Закрыть? Там. Из вашего первоначального вопроса было неясно, что вы пытались сделать. Казалось, вы хотели переместить мышь относительно ее предыдущего положения. Но похоже, что на самом деле вы пытаетесь изменить масштаб координат. Это правильно?
4. @BoarGules Извините, я торопился и вместо редактирования ответил. Но то, что я пытаюсь сделать,-это заставить мышь следовать за точкой, которая движется в отдельном окне вывода в режиме реального времени. Окно находится в левом верхнем углу экрана и составляет половину размера экрана по ширине и высоте. Проблема, с которой я сталкиваюсь, заключается в том, что если точка исчезла, давайте из позиции (10,15) и появится на (120,130), я хочу, чтобы мышь переместилась из предыдущей позиции, т. Е. (10,15), но она просто переходит в (120,130). Надеюсь, я все ясно объяснил.
Ответ №1:
PyAutoGUI поддерживает как абсолютное, так и относительное перемещение.
pyautogui.moveRel(xOffset, yOffset)
перемещает мышь относительно ее текущего положения.pyautogui.moveTo(x, y)
перемещается в указанные координаты экрана.
Если вы посмотрите в исходный код PyAutoGUI, вы увидите, что move()
это просто псевдоним moveRel()
, который был добавлен в версии v1.0
Если вы хотите преобразовать координаты из оконного пространства в пространство экрана, вам сначала нужно рассчитать местоположение окна в пространстве экрана и использовать его в качестве смещения при расчете координат пространства экрана.