라온LC

수업 일지

[마곡 코딩] 파이썬 11월 7일 금요일 7시 수업_ tkinter(이미지 뷰어) 3차시

금 7:00 스파이크 파이썬22025.11.10

파이썬 (Python) _ 가을 학기 9주 차

지난 시간에는 '이미지 뷰어'에 필요한 기능들을 대부분 구현해 봤습니다. 이번 시간에는 마우스/키보드의 이벤트 처리와 속성들에 대해 알아본 후, '이미지 뷰어' 프로그램에 구현해 보도록 하겠습니다.

pLabel.bind("<Button>", clickImage)

bind 메서드는 위젯에 '이벤트가 발생했을 때 실행되는 메서드'로 위젯을 클릭하고 키를 누르는 등 여러 작동에 따른 이벤트를 감지하여 이벤트와 연결된 함수가 호출되는 방식입니다.

마우스 작동마우스 버튼이벤트 코드
클릭할 때모든 버튼 공통<Button>
​왼쪽 버튼<Button-1>
​가운데 버튼<Button-2>
​오른쪽 버튼<Button-3>
떼었을 때모든 버튼 공통<ButtonRelease>
​왼쪽 버튼<ButtonRelease-1>
​가운데 버튼<ButtonRelease-2>
​오른쪽 버튼<ButtonRelease-3>
더블클릭할 때모든 버튼 공통<Double-Button>
​왼쪽 버튼<Double-Button-1>
​가운데 버튼<Double-Button-2>
​오른쪽 버튼<Double-Button-3>
드래그할 때왼쪽 버튼<B1-Motion>
​가운데 버튼<B2-Motion>
​오른쪽 버튼<B3-Motion>
마우스 커서가 위젯 위로 올라왔을 때<Enter>
마우스 커서가 위젯에서 떠났을 때<Leave>

마우스 이벤트 처리에 대해 살펴보자면, 마우스 클릭할 때, 마우스를 떼었을 때, 더블 클릭을 할 때, 드래그할 때, 마우스 커서가 위젯 위로 올라갈 때, 혹은 위젯을 벗어났을 때와 같이 마우스 작동과 관련한 다양한 이벤트를 감지하고 있습니다. 예를 들어 <Button-1> 이벤트가 발생하기 위해서는 마우스 왼쪽 버튼으로 위젯을 클릭해야 합니다.

pLabel.bind("<Button>", clickImage)

해당 코드에서는 <Button> 이벤트가 발생하게 된다면 clickImage 함수가 호출됩니다. 이렇게 이벤트가 발생했을 때 호출될 함수를 handler라고 부르게 되며 <Button>과 같이 이벤트의 종류를 나타내는 문자열은 sequence라고 부릅니다.

from tkinter import messagebox

def clickImage(event) : messagebox.showinfo("마우스", "마우스가 클릭됨")

pLabel.bind("<Button>", clickImage)

코드를 살펴보게 되면 <Button> 이벤트가 발생하면 clickImage 함수가 호출되어 "마우스가 클릭됨"이라는 메시지 박스 정보 창이 출력되는 코드를 만들어 봤습니다. 여기서 event는 Tkinter가 이벤트가 발생했을 때 핸들러(clickImage)에 전달하는 객체입니다. event에는 발생한 이벤트에 대한 모든 정보가 저장되어 있습니다.

속성의미예시/설명
event.num눌린 마우스 버튼 번호1=왼쪽, 2=가운데, 3=오른쪽, 4=휠 위, 5=휠 아래
event.x위젯 기준 x 좌표클릭한 위치의 x 픽셀
event.y위젯 기준 y 좌표클릭한 위치의 y 픽셀
event.x_root화면 기준 x 좌표모니터 전체 화면 기준의 x 좌표
event.y_root화면 기준 y 좌표모니터 전체 화면 기준의 y 좌표
event.widget이벤트 발생 위젯 객체Label, Button 등 이벤트가 발생한 위젯 참조
event.type이벤트 타입ButtonPress, ButtonRelease 등
event.stateShift, Ctrl, Alt 키 상태이벤트 발생 시 어떤 수정 키가 눌렸는지
event.delta휠 이벤트 이동량Windows에서 마우스 휠 스크롤 양

위 표는 이벤트 종류에 따른 이벤트 속성들을 보여주고 있습니다. event.x와 event.y는 마우스가 클릭했을 때의 x, y 픽셀 좌표를 나타내며 event.num에는 마우스가 어떻게 눌렸는지(왼쪽 클릭, 오른쪽 클릭 등)에 대한 정보를 담고 있습니다.

[마곡 코딩] 파이썬 11월 7일 금요일 7시 수업_ tkinter(이미지 뷰어) 3차시 사진 1

이러한 속성들을 활용해 왼쪽 위에 label 위젯을 사용하여 눌린 마우스에 대한 정보가 출력되도록 만들어 봤습니다.

이벤트설명
<Key> 또는 <KeyPress>아무 키나 눌렀을 때
<KeyRelease>키를 뗐을 때
<Return>Enter 키
<BackSpace>Backspace 키
<Tab>Tab 키
<Escape>Esc 키
<Shift_L> / <Shift_R>왼쪽/오른쪽 Shift
<Control_L> / <Control_R>왼쪽/오른쪽 Ctrl
<Alt_L> / <Alt_R>왼쪽/오른쪽 Alt
<Up> / <Down> / <Left> / <Right>방향키
<F1> ~ <F12>기능키

마우스 이벤트 외에도, 키보드 이벤트 처리도 알아봤습니다. 마우스와 비슷하게, 키보드의 특정한 키를 눌렀을 때 이벤트가 발생하도록 만들 수 있어, window 창 내에서 키보드를 입력하게 되면 입력된 키보드에 대한 정보가 출력되도록 코드를 작성해 봤습니다.

이렇게 이번 시간에는 이벤트 처리와 event 속성을 활용한 코딩을 진행해 봤습니다. 다음 시간에는 새로운 위젯에 대해 배워보도록 하겠습니다~

[마곡 코딩] 파이썬 11월 7일 금요일 7시 수업_ tkinter(이미지 뷰어) 3차시 사진 2

#마곡역 코딩 학원 #신방화역코딩학원 #유아코딩 #공항초 #공진초 #코드페어 #송화초 #초딩코딩 #AI #대회 #마곡나루맛집 #신방화역학원 #코딩학원 #소프트웨어 #대회준비 #VR #올림피아드 #엔트리 #신방화역맛집 #신방화역카페 #라온lc #laonlc #엔트리 #coding #파이썬 #스크래치