파이썬으로 아주 간단한 계산기를 만들었어요.
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. 모듈 가져오기
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 프로그램은 무한 반복 루프 안에서 동작합니다.
- 이 함수가 있어야 버튼을 눌렀을 때 반응하고, 창이 꺼지지 않아요.
구성 요소 | 설명 |
tk.Entry | 입력창 (사용자 입력 및 결과 표시) |
tk.Button | 숫자/기호 입력용 버튼 |
eval() | 문자열 수식을 계산하는 함수 |
grid() | 위젯 배치하는 레이아웃 시스템 |
mainloop() | 창을 계속 열어두는 반복 루프 |
이 계산기 코드는 단순해 보이지만,
파이썬에서 입력 → 처리 → 출력의 전체 흐름을 배우기에 아주 좋은 예제입니다.
또한 GUI와 사용자 이벤트(버튼 누름)를 연결하는 방법도 잘 보여주죠.
처음에는 코드가 복잡하게 느껴지더라도, 한 줄씩 차근차근 읽어보면 그리 어렵지 않아요!
코드에 자세하게 주석 넣어놨으니 전체코드도 참고해 주세요
'개발 & 코딩' 카테고리의 다른 글
안드로이드 스튜디오 AVD 실행 안됨 해결 방법 "The emulator process for AVD Pixel_2_API_34 has terminated" (0) | 2025.05.03 |
---|