Event 핸들링

tkinter 위젯들을 활용해 버튼 클릭이나 메뉴 클릭과 같은 이벤트 처리를 할 수 있다. 위젯의 파라미터에 command = “이벤트”를 사용해 위젯에 이벤트를 적용시킬 수 있다.

for button in buttons:  # for문을 통해 buttons 리스트에 있는 요소들을 하나씩 가져와 검사

    def cmd(x=button):  # 모든 버튼에 cmd함수 적용
        return click(x)

	main_button = Button(window, text=button, width=11, height=5, padx=1,
                         relief="ridge", bg=color, command=cmd)

위 코드는 계산기를 만들 때 사용했던 코드의 요약본이다.

cmd라는 함수 안에 매개변수로 x(button)을 입력받은 후 command=cmd를 통해 버튼에 클릭이 일어날 때마다 cmd함수가 발생하도록 설정하였다.

# click이라는 함수 정의

def click(key):
    if key == '=':
        try:
            result = eval(entry.get())  # entry.get() ->기입창의 텍스트를 문자열로 반환
            # 0 = entry위젯이서 첫 번째 문자 / END = entry위젯에서 마지막 컨텐츠
            entry.delete(0, END)
            entry.insert(END, str(result))
        except:
            entry.insert(END, "오류가 발생했습니다.")  # 정상적인 입력이 일어나지 않으면 오류 발생
    elif key == 'C':
        entry.delete(0, END)  # 'C'를 누르면 마찬가지로 다 지우기
    else:
        # 누른 버튼이 '='가 아니라면 마지막으로 입력한 문자 다음으로도 계속 문자를 받을 수 있도록 설정
        entry.insert(END, key)

click(x)에서 x는 key로 입력되는데

  1. click event가 발생하면 entry에 click한 버튼이 입력됨
  2. click 함수에서 입력된 버튼을 key로서 입력받아 if문을 돌게 된다.

이렇게 tkinter의 command를 활용해 event를 원하는 위젯에 전달할 수 있다.