본문 바로가기

개발/Python

[파이썬] pynput을 이용한 마우스 제어

이전 포스트에 이어 마우스 제어방법에 대해 알아보겠다.

pynput 이란, 키보드와 마우스를 제어할 수 있는 파이썬 라이브러리이다.

이 라이브러리를 통해 키보드와 마우스 입력을 하고, 리스너 등록을 통해 키보드와 마우스로부터 들어오는 값을 가져올 수도 있다.

1. 마우스 제어

하기 예제를 통해 마우스 클릭, 더블클릭, 이동, 드래그를 살펴보자.

from pynput.mouse import Button, Controller

class RemoteMouse:
    def __init__(self):
        self.mouse = Controller()

    def getPosition(self):
        return self.mouse.position

    def setPos(self, xPos, yPos):
        self.mouse.position = (xPos, yPos)

    def movePos(self, xPos, yPos):
        self.mouse.move(xPos, yPos)

    def click(self):
        self.mouse.click(Button.left)

    def doubleClick(self):
        self.mouse.click(Button.left, 2)

    def clickRight(self):
        self.mouse.click(Button.right)

    def drag(self, from_x, from_y, to_x, to_y, is_absolute=True):
        if is_absolute is True:
            self.mouse.position = (from_x, from_y)
        else:
            self.mouse.position = self.getPosition()
            self.click()
            self.mouse.move(from_x, from_y)
        self.click()
        self.mouse.press(Button.left)

        if is_absolute is True:
            self.mouse.position = (to_x, to_y)
        else:
            self.mouse.move(to_x, to_y)
        self.mouse.release(Button.left)

if __name__ == '__main__':
    mouse = RemoteMouse()
    print('X: %s, Y:%s' %mouse.getPosition())
    
    mouse.setPos(200, 200)
    mouse.movePos(400, 400)
    mouse.click()
    mouse.doubleClick()
    mouse.drag(200, 200, 400, 400)

 

2. 마우스 리스너

마우스의 위치값, 클릭여부, 스크롤에 대해 리스너를 통해 받아올 수 있다.

from pynput import mouse

def on_move(x,y):
    print('Position : x:%s, y:%s' %(x,y))

def on_click(x, y, button, pressed):
    print('Button: %s, Position: (%s, %s), Pressed: %s ' %(button, x, y, pressed))

def on_scroll(x, y, dx, dy):
    print('Scroll: (%s, %s) (%s, %s).' %(x, y, dx, dy))

with mouse.Listener(
    on_move=on_move,
    on_click=on_click,
    on_scroll=on_scroll) as listener:
    listener.join()