강의노트 키보드 이벤트
강의노트
• 조회수 58
• 댓글 0
• 작성 4주 전
• 수정 4주 전
키보드 이벤트
키보드에서 키를 누르거나 떼었을 때의 동작을 감지하고 실행한다.
키 이벤트의 종류
키 | 이벤트 코드 |
---|---|
모든 키 | < Key > |
특수 키 | < Return >, < BackSpace >, < Tab >, < Shift_L >, < Control_L >, < Alt_L >, < Pause >, < Caps_Lock >, < Escape >,< End >,< Home >,< Left > |
특수 키 | < Right >,< Up >,< Down >,< Num_Lock >,< Delete >,< F1 > ~ < F12> |
일반 키 | a ~ z, A ~ Z, 0 ~ 9, < space >,< less > |
화살표 키와 조합 | < Shift-Up >,< Shift-Down >,< Shift-Left >,< Shift-Right > |
키 이벤트 객체의 주요 속성
키 이벤트가 발생하면 event 객체가 전달되는데, 이 안에는 여러 정보가 들어 있다.
속성 | 설명 | 예 |
---|---|---|
event.state | 같이 눌린 키의 기호 이름 | 'Shift', 'Mod1' |
event.char | 눌린 키의 문자 값 | 'a' , 'b' |
event.keysym | 눌린 키의 기호 이름 | 'Return', 'shift_L' |
event.keycode | 눌린 키의 숫자 코드 |
'Mod1'은 NumLock 키가 눌렸을 때를 나타낸다.
기본 예제
키 입력 감지하기
import tkinter as tk
def key_event(event):
print("문자:", event.char)
print("키심:", event.keysym)
print("키코드:", event.keycode)
print("--------------")
root = tk.Tk()
root.geometry("300x200")
root.title("키 이벤트 예제")
label = tk.Label(root, text="키보드를 눌러보세요!", font=("Arial", 14))
label.pack(expand=True)
# 모든 키 입력을 감지
root.bind("" , key_event)
root.mainloop()
방향키로 라벨 움직이기
import tkinter as tk
def move_label(event):
if event.keysym == "Up":
canvas.move(label, 0, -10)
elif event.keysym == "Down":
canvas.move(label, 0, 10)
elif event.keysym == "Left":
canvas.move(label, -10, 0)
elif event.keysym == "Right":
canvas.move(label, 10, 0)
root = tk.Tk()
root.title("방향키 이동 예제")
canvas = tk.Canvas(root, width=300, height=200, bg="white")
canvas.pack()
label = canvas.create_text(150, 100, text="키로 라벨 움직이기", font=("Arial", 24))
root.bind("" , move_label)
root.mainloop()
연습문제
- 사용자가 a키를 누르면 "a키를 눌렀습니다." 메시지를 출력한다.
정답 :
import tkinter as tk
def key_event(event):
if event.keysym == "a":
print("a키를 눌렀습니다.")
root = tk.Tk()
root.title("Key Event 예제 1")
root.geometry("300x200")
root.bind("" , key_event)
root.mainloop()
- 창에 버튼을 하나 만들고 Enter (Return)키를 누르면 버튼이 눌린 것처럼 동작한다. 정답 :
import tkinter as tk
def button_action():
print("버튼이 눌렸습니다!")
def key_event(event):
if event.keysym == "Return": # Enter 키
button.invoke() # 버튼을 강제로 클릭한 것처럼 실행
root = tk.Tk()
root.title("Key Event 예제 2")
root.geometry("300x200")
button = tk.Button(root, text="눌러보세요", command=button_action)
button.pack(pady=50)
root.bind("" , key_event)
root.mainloop()
- 창의 배경색을 처음에는 하얀색으로 설정한다. 스페이스바(space)를 누를 때마다 배경색이 하양 /노랑으로 번갈아 바뀌도록 만든다. 정답 :
import tkinter as tk
def toggle_bg(event):
global is_white
if is_white:
root.configure(bg="yellow")
else:
root.configure(bg="white")
is_white = not is_white
root = tk.Tk()
root.title("Key Event 예제 3")
root.geometry("300x200")
is_white = True
root.configure(bg="white")
root.bind("" , toggle_bg)
root.mainloop()
- 창에 라벨을 만들고 무작위 알파벳을 저장하고 사용자가 해당 키를 입력하면 "정답!"이라고 출력하고 틀리면 "오답!"이라고 출력하게 만든다. 정답 :
import tkinter as tk
import random
import string
def key_event(event):
if event.keysym.lower() == target_letter:
result_label.config(text="정답!", fg="green")
else:
result_label.config(text="오답!", fg="red")
root = tk.Tk()
root.title("Key Event 예제 4")
root.geometry("300x200")
# 무작위 알파벳 하나 선택
target_letter = random.choice(string.ascii_lowercase)
# 문제 라벨
question_label = tk.Label(root, text=f"입력할 글자: {target_letter}", font=("Arial", 16))
question_label.pack(pady=20)
# 결과 라벨
result_label = tk.Label(root, text="", font=("Arial", 14))
result_label.pack()
root.bind("" , key_event)
root.mainloop()
이전 글
마지막 글입니다.
로그인 하면 댓글을 쓸 수 있습니다.