본문 바로가기
programming/Python

파이썬 tkinter grid 버튼에 이벤트 커맨드 설정

by 개코 - 개발과 코딩 2022. 1. 6.

버튼 또는 위젯을 동적으로 생성하는 것은 개발 편의성이 좋다. 하지만 동적으로 생성한 만큼 커맨드의 이벤트를 설정하고 파라미터를 보내는 것이 고민이 될 수 있다. lambda 를 사용하여 커맨드에 인자값을 함수에 보낼 수 있다.

파이썬 tkinter grid 버튼에 이벤트 커맨드 설정

이전엔 버튼을 동적으로 생성하면서 그리드 레이아웃에 3x3 버튼을 생성했다.

버튼을 생성했지만 클릭을 하고 함수가 실행되야 버튼으로써 목적이 생긴다.

이전에 만든 코드를 사용하여 버튼에 커맨드를 설정하고 버튼이 클릭되는 것을 확인한다.

커맨드 연결

버튼 위젯에 커맨드를 연결하는 것은 command 속성을 사용한다.

그리고, 인자값을 보내야 한다.

버튼에 인자값을 보내기 위해선 lamda 를 사용하면 된다.

사용법은 아래와 같다.

vButton = Button(vWindow)
vButton.config(text= f'[{vRow},{vColumn}]')
vButton.config(command=lambda GetText=vButton['text'] : fnButtonClick(GetText))
vButton.grid(row=vRow, column=vColumn)

함수 생성

클릭한 버튼이 동작할 함수를 만든다.

함수를 만드는 것도 어렵지 않다.

위의 코드의 커맨드 명령어에 설정된 함수를 만들어 본다.

def fnButtonClick(pText) :
    print(pText)

코드 샘플

이전 포스팅으로 라벨과 버튼을 반복문을 만들면서 동적으로 생성하고 그리드에 붙였다.

이제는 커맨드를 설정하고 함수를 연결한다.

위에서 언급한 코드를 그대로 사용할 것이다.

이제 전체 코드를 보자.

#----- import 모듈
import tkinter.messagebox as msgbox
from tkinter import *
from datetime import datetime

#----- 함수

def fnButtonClick(pText) :
    print(pText)

#----- 메인

# 윈도우 창 생성
vWindow = Tk()
vWindow.title('윈도우창 타이틀')
vWindow.geometry('640x320')
vWindow.option_add('*Font', '돋음 20')

for vRow in range(0, 3, 1) :
    for vColumn in range(0, 3, 1) :
        vButton = Button(vWindow)
        vButton.config(text= f'[{vRow},{vColumn}]')
        vButton.config(command=lambda GetText=vButton['text'] : fnButtonClick(GetText))
        vButton.grid(row=vRow, column=vColumn)

# 윈도우 창 실행
vWindow.mainloop()

lambda 를 사용하여 파라미터를 사용하고 커맨드에 인자값으로 설정했다.

함수는 사용하던 대로 그대로 사용하면 그만이다.

결과화면을 보자.

어떤 버튼을 클릭했는지 텍스트로 표현이 잘 되어 있다.

극단적으로 위젯자체를 파라미터로 보낼 수도 있다.

반응형

댓글