라온LC

수업 일지

[마곡 코딩] 파이썬 11월 20일 목요일 5시 30분 수업_ tkinter(이미지 뷰어) 3차시

목요일 5:30 파이썬22025.11.20

파이썬 (Python) _ 가을 학기 11 차시

안녕하세요~ 오늘은 이미지 뷰어 3차시 수업으로, 리스트 박스를 통해 이미지 변경하는 방식과 '마우스' / '키보드' 입력 처리와 관련한 기능을 구현해 보겠습니다.

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

먼저 '리스트 박스' 위젯과 '버튼' 위젯을 추가하여 '리스트 박스' 위젯을 사용하여 원하는 이미지 파일을 선택한 후, '선택된 항목 표시' 버튼을 누르면 선택한 이미지가 출력되도록 만들었습니다.

def sLb(): global num cs = listbox.curselection() num = cs[0] setP()

리스트 박스 위젯을 추가한 후, 버튼을 누르면 'sLb (setListbox)' 함수가 실행되도록 했습니다. 함수를 살펴보면 listbox.curselection() 메서드를 통해 현재 선택된 항목(인덱스)을 튜플 형식으로 저장한 후, 튜플로부터 현재 선택된 이미지의 번호 값을 전역변수 num에 저장한 후 setP() 함수를 호출하여 pLabel이 가리키고 있는 이미지가 바뀌도록 코딩했습니다.

이후에는 마우스 이벤트 처리에 대해 알아본 후, '이미지 뷰어' 프로그램에 활용해 봤습니다.

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-2> 이벤트가 발생하기 위해서는 마우스 가운데 버튼으로 위젯을 클릭해야 합니다.

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월 20일 목요일 5시 30분 수업_ tkinter(이미지 뷰어) 3차시 사진 2

이러한 속성들을 활용해 왼쪽 위에 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>기능키

이번에는 키보드 이벤트 처리와 관련한 표입니다. 마우스와 비슷하게, 키보드의 특정한 키를 눌렀을 때 이벤트가 발생하도록 만들 수 있습니다.

[마곡 코딩] 파이썬 11월 20일 목요일 5시 30분 수업_ tkinter(이미지 뷰어) 3차시 사진 3

해당 이벤트를 활용하여 window 창 내에서 키보드를 입력하게 되면 입력된 키보드에 대한 정보가 출력되도록 코드를 작성해 봤습니다.

def keyEvent(event): print(event) messagebox.showinfo("키보드 이벤트", "눌린 키 : " + event.char) # event.keysym window.bind("<Key>", keyEvent)

코드를 살펴보면 bind 함수를 통해 <Key> 이벤트가 탐지된다면 keyEven() 함수가 실행되도록 했습니다. 해당 함수는 event에 들어있는 정보를 출력한 후, 메시지 박스를 활용하여 눌린 키에 대한 정보가 출력되게 했습니다.

print(event)를 통해 키보드 이벤트와 관련한 속성 값을 참고해 미션을 해결해 봤습니다. 여기서 event.char 속성은 키보드로 입력된 버튼의 '문자'값을 저장하고 있어 K 키를 누르게 된다면 위 이미지와 같은 결과를 볼 수 있었습니다.

이렇게 이번 시간에는 이벤트 처리와 event 속성을 활용한 코딩을 진행해 봤습니다. 다음 시간에는 메모장 프로그램을 간략하게 구현해 보도록 하겠습니다~

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