Tkinter의 Button(버튼) 위젯은 일반적으로 애플리케이션에서 정의된 이벤트를 실행하는 용도로 사용됩니다. 버튼에 이벤트를 바인딩하면 사용자가 특정 동작을 트리거할 때마다 해당 이벤트가 자동으로 실행되도록 만들 수 있습니다.
하지만 함수나 이벤트 외부에 있는 데이터와 변수를 함께 전달해야 할 때는 다소 까다로울 수 있습니다. 다행히 버튼 위젯에서는 command 옵션과 함께 인수와 데이터를 전달할 수 있어, 외부 값을 이벤트 내부에서 자유롭게 공유하고 활용할 수 있습니다.
즉, 버튼 위젯에 인수를 전달하면 이벤트 핸들러가 그 인수를 받아 프로그램의 다른 부분에서 계속 사용할 수 있게 됩니다.
구현 방법
버튼의 command 매개변수에는 기본적으로 인수를 받지 않는 함수만 지정할 수 있습니다. 따라서 인수를 전달하려면 lambda(람다) 함수를 활용하는 것이 가장 간단한 방법입니다.
예제 코드
# 필요한 라이브러리 임포트
from tkinter import *
from tkinter import ttk
from tkinter import messagebox
# tkinter 프레임 인스턴스 생성
win = Tk()
# 창 크기 설정
win.geometry("700x250")
# Entry 위젯에 텍스트를 삽입하는 함수 정의
def update_name(name):
entry.insert(END, str(name))
# Entry 위젯 생성
entry = Entry(win, width=35, font=('Calibri 15'))
entry.pack()
# lambda를 사용해 인수를 전달하는 버튼 생성
b = ttk.Button(win, text="Insert", command=lambda: update_name("Tutorialspoint"))
b.pack(pady=30)
win.mainloop()실행 결과
위 코드를 실행하면 Entry(입력) 위젯과 텍스트를 삽입하는 버튼이 포함된 창이 화면에 나타납니다.

여기서 "Insert" 버튼을 클릭하면, 람다 함수를 통해 전달된 문자열 인수가 update_name 함수로 넘어가 Entry 위젯에 텍스트가 추가됩니다.

정리
Tkinter 버튼에 인수를 전달하는 핵심은 lambda를 사용하는 것입니다. command=lambda: 함수명(인수) 형태로 작성하면 클릭 시점에 원하는 값을 함수에 넘겨줄 수 있습니다. 여러 개의 인수가 필요한 경우에도 lambda: func(a, b)처럼 쉼표로 구분해 전달하면 되므로, 상황에 맞게 유연하게 활용해 보시기 바랍니다.