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

Tkinter에서 버튼 하나로 여러 명령(함수) 동시에 실행하는 방법

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()]: 람다 함수가 리스트 형태로 두 함수를 반환하므로, 버튼 클릭 시 두 작업이 모두 실행됩니다.

실행 결과

위 코드를 실행하면 버튼이 포함된 창이 나타납니다.

Tkinter에서 버튼 하나로 여러 명령(함수) 동시에 실행하는 방법

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

Tkinter에서 버튼 하나로 여러 명령(함수) 동시에 실행하는 방법

마무리

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