Tkinter의 Button(버튼) 위젯은 애플리케이션의 다양한 기능과 상호작용할 수 있게 해주는 핵심 요소입니다. 일반적으로 하나의 버튼에는 command 옵션을 통해 하나의 콜백 함수만 연결하지만, 실제 개발에서는 버튼 한 번의 클릭으로 여러 작업을 동시에 처리해야 하는 경우가 자주 발생합니다.
이럴 때 가장 간단하고 효과적인 방법은 람다(lambda) 함수를 활용하는 것입니다. 람다 함수 안에 실행하고자 하는 여러 함수를 리스트 형태로 나열하면, 버튼이 클릭될 때 해당 함수들이 순차적으로 모두 호출됩니다.
예제 코드
아래 예제에서는 하나의 버튼에 두 가지 이벤트(메시지 표시 + 목록 출력)를 연결하여 실행합니다.
# Tkinter 라이브러리 임포트
from tkinter import *
# Tkinter 프레임 인스턴스 생성
win = Tk()
# 윈도우 크기 설정
win.geometry("700x350")
# 함수 정의
def display_msg():
label.config(text="Top List of Programming Language")
def show_list():
listbox = Listbox(win, height=10, width=15, bg='grey', activestyle='dotbox', font='aerial')
listbox.insert(1, "Go")
listbox.insert(1, "Java")
listbox.insert(1, "Python")
listbox.insert(1, "C++")
listbox.insert(1, "Ruby")
listbox.pack()
button.destroy()
# 메시지를 표시할 Label 위젯 생성
label = Label(win, text="", font=('aerial 18 bold'))
label.pack(pady=20)
# 람다 함수로 여러 명령을 연결한 Button 위젯 정의
button = Button(win, text="Click Here", command=lambda: [display_msg(), show_list()])
button.pack()
win.mainloop()코드 설명
display_msg(): Label 위젯의 텍스트를 변경하여 프로그래밍 언어 순위라는 제목을 화면에 표시합니다.show_list(): Listbox 위젯을 새로 생성하고 Go, Java, Python, C++, Ruby 등의 언어 목록을 삽입한 뒤 화면에 배치합니다.lambda: [display_msg(), show_list()]: 람다 함수가 리스트 형태로 두 함수를 반환하므로, 버튼 클릭 시 두 작업이 모두 실행됩니다.
실행 결과
위 코드를 실행하면 버튼이 포함된 창이 나타납니다.

버튼을 클릭하면 두 가지 작업이 동시에 수행되어, 제목을 보여주는 Label 위젯과 프로그래밍 언어 목록이 함께 화면에 나타납니다.

마무리
이처럼 람다 함수를 사용하면 별도의 중간 함수를 만들지 않고도 하나의 버튼에 여러 콜백을 손쉽게 연결할 수 있습니다. 만약 실행해야 할 로직이 더 복잡하거나 조건 분기가 필요하다면, 여러 작업을 묶어 처리하는 전용 함수를 정의한 뒤 command에 연결하는 방식도 좋은 대안이 됩니다.