파이썬 tkinter 계산기 코드, 한 줄 한 줄 해석해드립니다

파이썬으로 아주 간단한 계산기를 만들었어요.
tkinter라는 파이썬 기본 GUI 라이브러리를 사용했고,
버튼을 눌러 수식을 입력하고, 결과를 출력하는 아주 기본적인 형태예요.

이번 글에서는 제가 작성한 이 코드를 한 줄 한 줄 자세히 해석해서,
처음 파이썬 GUI를 접하는 분들도 이해할 수 있게 설명해 볼게요.


# tkinter는 파이썬에서 GUI(그래픽 사용자 인터페이스)를 만들 때 쓰는 기본 모듈입니다.
import tkinter as tk

# 계산을 수행하는 함수입니다.
def calculate():
    try:
        # entry 위젯에서 입력된 문자열(예: "2+3*4")을 가져옵니다.
        expression = entry.get()
        
        # eval() 함수는 문자열을 그대로 계산해주는 파이썬 내장 함수입니다.
        # 예: eval("2+3*4") → 14
        result = eval(expression)
        
        # 계산 전에 입력창을 비웁니다.
        entry.delete(0, tk.END)
        
        # 계산 결과를 문자열로 바꿔서 입력창에 표시합니다.
        entry.insert(0, str(result))
    
    except Exception as e:
        # 만약 수식이 잘못되었거나 오류가 발생했다면,
        # 입력창을 비우고 "오류"라고 표시해줍니다.
        entry.delete(0, tk.END)
        entry.insert(0, "오류")

# tkinter로 새 창(윈도우)을 하나 생성합니다.
root = tk.Tk()

# 창의 제목을 설정합니다.
root.title("초간단 계산기")

# 입력창(Entry 위젯)을 생성합니다.
# 사용자가 수식을 입력하거나 결과가 표시될 공간입니다.
entry = tk.Entry(
    root,           # 부모 위젯은 root (창 전체)
    width=25,       # 입력창 너비 (문자 수 기준)
    font=("Arial", 14),  # 글씨 크기와 폰트 설정
    justify="right"     # 입력된 글자가 오른쪽 정렬되도록 설정
)
# 입력창을 그리드(행/열) 레이아웃에 배치합니다.
entry.grid(row=0, column=0, columnspan=4, padx=10, pady=10)
# row=0 → 첫 번째 줄, columnspan=4 → 4칸 차지, 패딩은 여백

# 계산기에 들어갈 버튼 텍스트들을 리스트로 만듭니다.
# 이 순서대로 버튼이 생성되고 배치될 예정입니다.
buttons = [
    '7', '8', '9', '/',
    '4', '5', '6', '*',
    '1', '2', '3', '-',
    '0', 'C', '=', '+'
]

# 버튼을 하나씩 생성하면서 화면에 배치합니다.
row = 1  # 버튼은 첫 번째 줄(entry) 밑인 1번 행부터 시작
col = 0  # 열은 0부터 시작

for btn_text in buttons:
    
    # 각 버튼이 눌렸을 때 어떤 동작을 할지 결정하는 함수입니다.
    def make_command(x=btn_text):  # 기본값 설정으로 반복문 문제 방지
        if x == "=":
            return calculate  # '=' 버튼이면 계산 함수 연결
        elif x == "C":
            return lambda: entry.delete(0, tk.END)  # 'C'는 입력창 비우기
        else:
            # 숫자나 연산자는 입력창에 해당 글자를 추가합니다.
            return lambda: entry.insert(tk.END, x)

    # 버튼 위젯을 생성합니다.
    btn = tk.Button(
        root,                  # 부모 위젯은 root
        text=btn_text,         # 버튼에 표시될 글자
        width=5, height=2,     # 버튼 크기
        font=("Arial", 12),    # 버튼 글자 크기
        command=make_command() # 눌렀을 때 실행할 함수
    )

    # 버튼을 그리드(행/열) 위치에 배치합니다.
    btn.grid(row=row, column=col, padx=5, pady=5)

    # 버튼을 오른쪽으로 이동시키기 위해 열 값 증가
    col += 1
    # 만약 열이 4를 넘으면 다음 줄(row)로 내려가고 열(col)은 0으로 초기화
    if col > 3:
        col = 0
        row += 1

# tkinter의 메인 루프를 실행합니다.
# 이게 있어야 창이 계속 유지되면서 버튼을 누를 수 있습니다.
root.mainloop()

전체 코드 구조 요약

이 코드의 구성은 총 4 부분으로 나뉩니다:

  1. 필요한 모듈 가져오기
  2. 계산을 처리하는 함수
  3. 윈도우 생성 및 버튼/입력창 배치
  4. 프로그램 실행

1. 모듈 가져오기

import tkinter as tk

 

  • tkinter는 파이썬에서 GUI(그래픽 사용자 인터페이스)를 만들 때 사용하는 기본 내장 모듈입니다.
  • as tk로 별칭을 주면, 코드에서 tk.Entry, tk.Button처럼 더 짧게 쓸 수 있어요

 

2. 계산을 처리하는 함수

def calculate():
    try:
        expression = entry.get()
        result = eval(expression)
        entry.delete(0, tk.END)
        entry.insert(0, str(result))
    except Exception as e:
        entry.delete(0, tk.END)
        entry.insert(0, "오류")

 

각 줄 해설

  • def calculate():
    계산을 수행할 함수 선언입니다.
  • entry.get()
    입력창에서 사용자가 입력한 **문자열(수식)**을 가져옵니다.
    예: "7+3*2"
  • eval(expression)
    문자열을 실제 수식으로 계산해 주는 파이썬 내장 함수입니다.
    "7+3*2" → 13
  • entry.delete(0, tk.END)
    입력창의 내용을 지웁니다.
  • entry.insert(0, str(result))
    계산 결과를 다시 입력창에 표시합니다.
  • except Exception as e:
    수식이 잘못됐거나 오류가 날 경우 "오류"라고 표시합니다.
    예: "3++" 같이 잘못된 수식 입력 시

 

창 만들기

root = tk.Tk()
root.title("초간단 계산기")

 

  • tk.Tk() → GUI 창 생성
  • title() → 윈도우 창 제목 설정

입력창 만들기

entry = tk.Entry(root, width=25, font=("Arial", 14), justify="right")
entry.grid(row=0, column=0, columnspan=4, padx=10, pady=10)

 

 

  • tk.Entry() → 입력창 위젯
  • justify="right" → 글자 오른쪽 정렬
  • grid() → 입력창을 창 위에 행(row), 열(column) 기준으로 배치

버튼 리스트 생성

buttons = ['7', '8', '9', '/', ...]
  • 계산기에 필요한 숫자, 연산자, =, C 버튼을 순서대로 나열한 리스트입니다.

버튼 생성 & 배치

for btn_text in buttons:
    def make_command(x=btn_text):
        if x == "=":
            return calculate
        elif x == "C":
            return lambda: entry.delete(0, tk.END)
        else:
            return lambda: entry.insert(tk.END, x)
    
    btn = tk.Button(... command=make_command())
    btn.grid(row=row, column=col, ...)

 

  • 버튼을 하나씩 만들어서 계산기 형태로 자동 배치합니다.
  • make_command()는 각 버튼이 눌렸을 때 실행할 동작을 정의합니다.
  •  

프로그램 실행

root.mainloop()

 

 

  • GUI 프로그램은 무한 반복 루프 안에서 동작합니다.
  • 이 함수가 있어야 버튼을 눌렀을 때 반응하고, 창이 꺼지지 않아요.

 

파이썬-계산기-사진
gui 파이썬 계산기 실행 화면

구성 요소 설명
tk.Entry 입력창 (사용자 입력 및 결과 표시)
tk.Button 숫자/기호 입력용 버튼
eval() 문자열 수식을 계산하는 함수
grid() 위젯 배치하는 레이아웃 시스템
mainloop() 창을 계속 열어두는 반복 루프

이 계산기 코드는 단순해 보이지만,
파이썬에서 입력 → 처리 → 출력의 전체 흐름을 배우기에 아주 좋은 예제입니다.
또한 GUI와 사용자 이벤트(버튼 누름)를 연결하는 방법도 잘 보여주죠.

처음에는 코드가 복잡하게 느껴지더라도, 한 줄씩 차근차근 읽어보면 그리 어렵지 않아요!

 

코드에 자세하게 주석 넣어놨으니 전체코드도 참고해 주세요