Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Tkinter에서 하나의 bind()로 여러 이벤트를 바인딩하는 방법

특정 애플리케이션에서 버튼을 활용해 여러 작업을 수행하고 싶다면 bind(위젯, 콜백) 메서드를 사용할 수 있습니다. 이 메서드는 버튼과 이벤트를 하나로 묶어 애플리케이션 내에서 해당 이벤트가 실행되도록 예약하는 역할을 합니다.

만약 하나의 bind() 호출로 여러 이벤트나 콜백을 바인딩하고 싶다면, 먼저 모든 위젯을 순회(iterate)하면서 이들을 하나의 개체(entity)로 묶어야 합니다. 이렇게 만든 개체는 이후 여러 위젯에 동일한 이벤트를 일괄 적용하도록 구성할 수 있습니다.

예제 코드

# 필요한 라이브러리 임포트
from tkinter import *
from tkinter import ttk

# tkinter 프레임(윈도우) 인스턴스 생성
win = Tk()

# 윈도우 크기 설정
win.geometry("700x350")

def change_bgcolor(e):
    label.config(background="#adad12")

def change_fgcolor(e):
    label.config(foreground="white")

# Label 위젯 추가
label = Label(win, text="Hello World! Welcome to Tutorialspoint", font=('Georgia 19 italic'))
label.pack(pady=30)

# 이벤트를 트리거할 버튼 추가
b1 = ttk.Button(win, text="Button-1")
b1.pack()

# 이벤트 바인딩
for b in [b1]:
    b.bind("", change_bgcolor)
    b.bind("", change_fgcolor)

win.mainloop()

실행 결과

위 코드를 실행하면 버튼이 하나 포함된 윈도우가 화면에 나타납니다.

버튼 위에 마우스 커서를 올리면(<Enter> 이벤트) Label의 배경색이 변경됩니다. 반대로 버튼에서 마우스 커서가 벗어나면(<Leave> 이벤트) Label 위젯의 글자색이 흰색으로 바뀝니다.

이처럼 리스트나 튜플에 여러 버튼을 담아 for 루프로 순회하면, 각 버튼마다 bind()를 반복해서 호출하지 않고도 동일한 이벤트 핸들러를 한 번에 적용할 수 있습니다. 위젯 수가 많아질수록 코드가 간결해지고 유지보수성도 크게 향상됩니다.