Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬 Tkinter로 만드는 간단한 GUI 계산기 완벽 가이드


이 튜토리얼에서는 파이썬의 내장 모듈인 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()

실행 결과

위 프로그램을 실행하면 다음과 같은 간단한 계산기 창이 나타납니다.

파이썬 Tkinter로 만드는 간단한 GUI 계산기 완벽 가이드

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

파이썬 Tkinter로 만드는 간단한 GUI 계산기 완벽 가이드

핵심 개념 정리

  • StringVar: 입력 필드의 값을 실시간으로 추적하고 변경할 수 있는 Tkinter의 변수 클래스입니다.

  • grid() 메서드: 행(row)과 열(column) 좌표를 기준으로 버튼 등의 위젯을 격자 형태로 배치합니다.

  • lambda 함수: 버튼 클릭 시 인자를 함께 전달해야 하는 경우 command 옵션에 lambda를 활용합니다.

  • eval() 함수: 문자열 형태의 수식을 실제 계산하여 결과를 반환하지만, 신뢰할 수 없는 입력에는 주의해서 사용해야 합니다.

마무리

이번 튜토리얼에서는 파이썬의 Tkinter 모듈만으로 사칙연산이 가능한 GUI 계산기를 완성했습니다. 여기에 제곱, 제곱근, 소수점 처리 같은 기능을 추가하면 더욱 완성도 높은 계산기를 만들 수 있습니다. 튜토리얼을 따라 하면서 궁금한 점이나 어려운 부분이 있다면 댓글로 남겨주세요.