반응형
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()
위 코드의 "<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()
반응형
'Python' 카테고리의 다른 글
(파이썬) Car: 기본 클래스 만들기, 생성자 속성 메소드 (0) | 2023.12.05 |
---|---|
(파이썬) 리스트에서 중복되지 않은 단어의 개수 세기 (0) | 2023.12.03 |
(파이썬) 버튼 위젯 크기 변경하기 (0) | 2023.12.01 |
(파이썬) SQLite 데이터베이스에 연결해서 테이블 출력하기 SELECT (0) | 2023.11.28 |
(파이썬) 위젯 배치: pack place grid frame (0) | 2023.11.26 |