이 튜토리얼에서는 파이썬의 내장 모듈인 Tkinter를 사용하여 간단한 GUI 계산기를 직접 만들어 보겠습니다. Tkinter는 파이썬에 기본으로 포함되어 있어 별도의 설치 없이 바로 사용할 수 있으며, GUI 애플리케이션을 개발하기에 가장 쉽고 간편한 도구 중 하나입니다. GUI 애플리케이션을 활용하면 데이터를 시각적으로 표현하고 사용자와 상호작용하는 프로그램을 손쉽게 구축할 수 있습니다.
그럼 지금부터 간단한 GUI 계산기를 만드는 방법을 단계별로 살펴보겠습니다.
구현 순서
*를 사용하여 Tkinter 모듈의 모든 요소를 가져옵니다.계산기의 기본 인터페이스(메인 윈도우)를 생성합니다.
입력 필드에 숫자를 입력하는
input_number함수를 작성합니다.입력 필드의 내용을 모두 지우는
clear_input_field함수를 작성합니다.수식을 계산하고 결과를 출력하는
evaluate함수를 작성합니다.
전체 코드 예제
# tkinter에서 모든 요소 가져오기
from tkinter import *
# 모든 함수에서 접근할 수 있는 전역 변수
class="notranslate">expression = ""
# 숫자를 입력 필드에 추가하는 함수
def input_number(number, equation):
global expression
# 문자열 연결로 수식을 이어 붙임
expression = expression + str(number)
equation.set(expression)
# 입력 필드를 초기화하는 함수
def clear_input_field(equation):
global expression
expression = ""
# 입력 필드에 안내 문구 설정
equation.set("Enter the expression")
# 수식을 계산하는 함수
def evaluate(equation):
global expression
try:
# 수식을 평가하여 결과 생성
result = str(eval(expression))
# 입력 필드에 결과 표시
equation.set(result)
expression = ""
except:
# 오류 발생 시 안내 메시지 표시
equation.set("Enter a valid expression")
expression = ""
# GUI 생성
def main():
# 메인 윈도우 생성
window = Tk()
# 윈도우 제목 설정
window.title("Calculator")
# 윈도우 크기 설정
window.geometry("325x175")
# StringVar 클래스 인스턴스 생성
equation = StringVar()
# 수식 입력 필드 생성
input_field = Entry(window, textvariable=equation)
input_field.place(height=100)
# 위젯 배치에는 grid 레이아웃 사용
input_field.grid(columnspan=4, ipadx=100, ipady=5)
# 사용자를 위한 안내 문구 설정
equation.set("Enter the expression")
# 숫자 및 연산자 버튼 생성 후 위치 지정
_1 = Button(window, text='1', fg='white', bg='black', bd=0, command=lambda: input_number(1, equation), height=2, width=7)
_1.grid(row=2, column=0)
_2 = Button(window, text='2', fg='white', bg='black', bd=0, command=lambda: input_number(2, equation), height=2, width=7)
_2.grid(row=2, column=1)
_3 = Button(window, text='3', fg='white', bg='black', bd=0, command=lambda: input_number(3, equation), height=2, width=7)
_3.grid(row=2, column=2)
_4 = Button(window, text='4', fg='white', bg='black', bd=0, command=lambda: input_number(4, equation), height=2, width=7)
_4.grid(row=3, column=0)
_5 = Button(window, text='5', fg='white', bg='black', bd=0, command=lambda: input_number(5, equation), height=2, width=7)
_5.grid(row=3, column=1)
_6 = Button(window, text='6', fg='white', bg='black', bd=0, command=lambda: input_number(6, equation), height=2, width=7)
_6.grid(row=3, column=2)
_7 = Button(window, text='7', fg='white', bg='black', bd=0, command=lambda: input_number(7, equation), height=2, width=7)
_7.grid(row=4, column=0)
_8 = Button(window, text='8', fg='white', bg='black', bd=0, command=lambda: input_number(8, equation), height=2, width=7)
_8.grid(row=4, column=1)
_9 = Button(window, text='9', fg='white', bg='black', bd=0, command=lambda: input_number(9, equation), height=2, width=7)
_9.grid(row=4, column=2)
_0 = Button(window, text='0', fg='white', bg='black', bd=0, command=lambda: input_number(0, equation), height=2, width=7)
_0.grid(row=5, column=0)
plus = Button(window, text='+', fg='white', bg='black', bd=0, command=lambda: input_number('+', equation), height=2, width=7)
plus.grid(row=2, column=3)
minus = Button(window, text='-', fg='white', bg='black', bd=0, command=lambda: input_number('-', equation), height=2, width=7)
minus.grid(row=3, column=3)
multiply = Button(window, text='*', fg='white', bg='black', bd=0, command=lambda: input_number('*', equation), height=2, width=7)
multiply.grid(row=4, column=3)
divide = Button(window, text='/', fg='white', bg='black', bd=0, command=lambda: input_number('/', equation), height=2, width=7)
divide.grid(row=5, column=3)
equal = Button(window, text='=', fg='white', bg='black', bd=0, command=lambda: evaluate(equation), height=2, width=7)
equal.grid(row=5, column=2)
clear = Button(window, text='Clear', fg='white', bg='black', bd=0, command=lambda: clear_input_field(equation), height=2, width=7)
clear.grid(row=5, column=1)
# GUI 화면 표시
window.mainloop()
# 프로그램 시작점
if __name__ == '__main__':
main()실행 결과
위 프로그램을 실행하면 다음과 같은 간단한 계산기 창이 나타납니다.

'=' 버튼을 누르면 입력한 수식의 계산 결과가 아래와 같이 입력 필드에 표시됩니다.

핵심 개념 정리
StringVar: 입력 필드의 값을 실시간으로 추적하고 변경할 수 있는 Tkinter의 변수 클래스입니다.
grid() 메서드: 행(row)과 열(column) 좌표를 기준으로 버튼 등의 위젯을 격자 형태로 배치합니다.
lambda 함수: 버튼 클릭 시 인자를 함께 전달해야 하는 경우 command 옵션에 lambda를 활용합니다.
eval() 함수: 문자열 형태의 수식을 실제 계산하여 결과를 반환하지만, 신뢰할 수 없는 입력에는 주의해서 사용해야 합니다.
마무리
이번 튜토리얼에서는 파이썬의 Tkinter 모듈만으로 사칙연산이 가능한 GUI 계산기를 완성했습니다. 여기에 제곱, 제곱근, 소수점 처리 같은 기능을 추가하면 더욱 완성도 높은 계산기를 만들 수 있습니다. 튜토리얼을 따라 하면서 궁금한 점이나 어려운 부분이 있다면 댓글로 남겨주세요.