윈도우 프로그램 이벤트

강의노트 키보드 이벤트

강의노트 • 조회수 56 • 댓글 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()

연습문제

  1. 사용자가 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()
  1. 창에 버튼을 하나 만들고 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()
  1. 창의 배경색을 처음에는 하얀색으로 설정한다. 스페이스바(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()
  1. 창에 라벨을 만들고 무작위 알파벳을 저장하고 사용자가 해당 키를 입력하면 "정답!"이라고 출력하고 틀리면 "오답!"이라고 출력하게 만든다. 정답 :
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()
이전 글
마지막 글입니다.
댓글
댓글로 소통하세요.