Python

(파이썬) tkinter: 마우스 이벤트 처리하기, 그림 그리기

코딩ABC 2023. 12. 2. 19:35
반응형

 

tkinter 모듈을 이용한 윈도우용 응용 프로그램에서 마우스 이벤트 처리에 대해서 설명합니다.

 

위젯에 마우스 이벤트를 처리하는 방법은 다음과 같습니다.

위젯.bind("<이벤트_지정자>", 이벤트_발생시_처리할_함수)

 

이벤트 지정자에는 다음과 같은 기능이 있습니다. 

이벤트 설명
<Button>
<Button-1>
<Button-2>
<Button-3>
마우스 버튼
마우스 왼쪽 버튼
마우스 가운데 버튼
마우스 오른쪽 버튼
<Mortion>
<B1-Mortion>
<B2-Mortion>
<B3-Mortion>
마우스가 움직이면 발생
왼쪽 버튼을 누르면서 움직이면 발생
가운데 버튼을 누르면서 움직이면 발생
오른쪽 버튼을 누르면서 움직이면 발생
<DoubleButton> 더블 클릭하면 발생
<ButtonRelease>
<ButtonRelease-1>
버튼을 놓을 때 발생
왼쪽 버튼을 놓을 때 발생
<Enter> 마우스 포인터가 위젯 내부에 진입하면 발생
<Leave> 마우스 포인터가 위젯을 벗어나면 발생

 

 

다음 코드는 윈도우 폼을 마우스 버튼으로 클릭하면 어떤 마우스 버튼인지 표시해줍니다.

from tkinter import *

def func1(event):
    if event.num == 1:
        label.configure(text='마우스 왼쪽 버튼을 눌렀습니다.')
    elif event.num == 2:
        label.configure(text='마우스 가운데 버튼을 눌렀습니다.')
    elif event.num == 3:
        label.configure(text='마우스 오른쪽 버튼을 눌렀습니다.')      
    
win = Tk()
win.geometry("200x100")

label = Label(win, text="마우스 버튼을 눌러보세요")

label.pack(expand=True, anchor=CENTER)

win.bind("<Button>", func1)
mainloop()

(파이썬) tkinter: 마우스 이벤트 처리하기

 

 

위 코드의 "<Button>"을 "<Button-1>"로 변경하면 마우스 왼쪽 버튼에만 반응하게 됩니다.

from tkinter import *

def func1(event):
    if event.num == 1:
        label.configure(text='마우스 왼쪽 버튼을 눌렀습니다.')
    elif event.num == 2:
        label.configure(text='마우스 가운데 버튼을 눌렀습니다.')
    elif event.num == 3:
        label.configure(text='마우스 오른쪽 버튼을 눌렀습니다.')
        
    
    
win = Tk()
win.geometry("200x100")

label = Label(win, text="마우스 버튼을 눌러보세요")

label.pack(expand=True, anchor=CENTER)

win.bind("<Button-1>", func1)
mainloop()

 

다음 코드는 "<B1-Motion>", "<ButtonRelease-1>"을 이용해서 그림을 그리는 코드입니다.

from tkinter import *

def draw(event):
    global b_x, b_y

    if b_x and b_y:
        canvas.create_line(b_x, b_y, event.x, event.y,
                           capstyle=ROUND, width=10, fill='black')
    b_x = event.x
    b_y = event.y

def reset(event):
    global b_x, b_y
    b_x, b_y = None, None
    
b_x = None
b_y = None



win = Tk()
canvas = Canvas(win, width=400, height=300, bg='white')
canvas.pack()
canvas.bind("<B1-Motion>", draw)
canvas.bind("<ButtonRelease-1>", reset)

mainloop()

(파이썬) tkinter: 마우스 이벤트 처리하기, 그림 그리기

반응형