니가 준 상처로 잘 먹고, 잘 살고 있어!!

저는 Python을 취미 삼아 공부하는 연식이 꽤 지난 어른아이로서, 
언제 어디서나 공부한 내용을 찾아보기 쉽도록 제 나름대로 정리하여 블로그에 포스팅하고 있습니다.

 

Simple_Calculator.py | Tkinter를 활용한 간단한 계산기 만들기

파이썬의 Tkinter 모듈를 활용하여 GUI 프로그램을 만들어 봅니다.

 

  1. Entry() 위젯으로 실행화면을 만듭니다.

  2. Button() 위젯으로 숫자와 계산 버튼을 만듭니다.

  3. grid() 속성으로 위젯의 위치를 정의합니다.

  4. 버튼의 command() 속성으로 버튼과 함수를 연결합니다.

  5. 버튼의 "lambda 표현식"으로 숫자 버튼에서 단 한번만 쓰이는 임시함수를 정의합니다.

  6. Entry() 화면에 insert()와 delete() 속성으로 값을 추가하거나 삭제해 봅니다.

  7. "grobal (전역)변수"로 입력받은 숫자를 / , *, -, + 로 받아오는 함수를 정의합니다.

  8. num_equal() 함수에서 "grobal (전역)변수"로 받아온 값의 계산식을 정의합니다. 

  9. Entry() 화면에 표시합니다.

 

앞서 공부한 내용을 바탕으로 왜 이런 결과가 나오는지 시행착오를 겪으면서 대략 2시간 정도 소요되었습니다.

 

Simple_Calculator.py | 화면에 표시되는 Tkinter 간단한 계산기

화면에 표시되는 Tkinter의 간단한 계산기

 

Simple_Calculator.py | Tkinter로 만든 간단한 계산기 예시

from tkinter import *

root = Tk()
root.title("단순한 계산기")
root.iconbitmap("./Tkinter/xingtu_icon.ico")  # 타이틀 앞에 아이콘 표시
root.resizable(False, False)  # x(너비), y(높이) 값 변경 불가 (창 크기 변경 불가)


# 실행화면
e = Entry(root, width=35, borderwidth=10)
e.grid(row=0, column=0, columnspan=4, padx=5, pady=5)


# 실행함수
f_num = 0
math = "calculation"

def num_click(number):
    if math == "equal":
        e.delete(0, END)

    current = e.get()
    e.delete(0, END)
    # e.insert(0, number)
    e.insert(0, str(current) + str(number))

def num_clear():
    e.delete(0, END)

def num_divide():
    global f_num
    global math
    f_num = int(e.get())
    math = "divide"
    e.delete(0, END)

def num_multiply():
    global f_num
    global math
    f_num = int(e.get())
    math = "multiply"
    e.delete(0, END)

def num_subtract():
    global f_num
    global math
    f_num = int(e.get())
    math = "subtract"
    e.delete(0, END)

def num_add():
    global f_num
    global math
    f_num = int(e.get())
    math = "add"
    e.delete(0, END)

def num_equal():
    s_num = e.get()
    e.delete(0, END)
    global math
    if math == "divide":
        e.insert(0, int(f_num / int(s_num)))
    if math == "multiply":
        e.insert(0, f_num * int(s_num))
    if math == "subtract":
        e.insert(0, f_num - int(s_num))
    if math == "add":
        e.insert(0, f_num + int(s_num))   
    math = "equal"


# 숫자 및 계산 버튼
num_clear = Button(root, text="clear", command=num_clear)
num_divide = Button(root, text="/", padx=25, pady=15, command=num_divide)
num_multiply = Button(root, text="*", padx=25, pady=15, command=num_multiply)

num_subtract = Button(root, text="-", padx=25, pady=15, command=num_subtract)
num_add = Button(root, text="+", padx=25, pady=15, command=num_add)

num_7 = Button(root, text="7", padx=25, pady=15, command=lambda: num_click(7))
num_8 = Button(root, text="8", padx=25, pady=15, command=lambda: num_click(8))
num_9 = Button(root, text="9", padx=25, pady=15, command=lambda: num_click(9))

num_4 = Button(root, text="4", padx=25, pady=15, command=lambda: num_click(4))
num_5 = Button(root, text="5", padx=25, pady=15, command=lambda: num_click(5))
num_6 = Button(root, text="6", padx=25, pady=15, command=lambda: num_click(6))

num_1 = Button(root, text="1", padx=25, pady=15, command=lambda: num_click(1))
num_2 = Button(root, text="2", padx=25, pady=15, command=lambda: num_click(2))
num_3 = Button(root, text="3", padx=25, pady=15, command=lambda: num_click(3))

num_0 = Button(root, text="0", padx=25, pady=15, command=lambda: num_click(0))
num_equal = Button(root, text="=", padx=25, pady=15, command=num_equal)


# 숫자 및 계산 버튼 자리 배치
num_clear.grid(row=1, column=0, sticky=N+E+W+S)
num_divide.grid(row=1, column=1, sticky=N+E+W+S)
num_multiply.grid(row=1, column=2, sticky=N+E+W+S)

num_subtract.grid(row=1, rowspan=2, column=3, sticky=N+E+W+S)
num_add.grid(row=3, rowspan=2, column=3, sticky=N+E+W+S)

num_7.grid(row=2, column=0, sticky=N+E+W+S)
num_8.grid(row=2, column=1, sticky=N+E+W+S)
num_9.grid(row=2, column=2, sticky=N+E+W+S)

num_4.grid(row=3, column=0, sticky=N+E+W+S)
num_5.grid(row=3, column=1, sticky=N+E+W+S)
num_6.grid(row=3, column=2, sticky=N+E+W+S)

num_1.grid(row=4, column=0, sticky=N+E+W+S)
num_2.grid(row=4, column=1, sticky=N+E+W+S)
num_3.grid(row=4, column=2, sticky=N+E+W+S)

num_0.grid(row=5, column=0, columnspan=2, sticky=N+E+W+S)
num_equal.grid(row=5, column=2, columnspan=2, sticky=N+E+W+S)


# 실행된 프로그램 순회
root.mainloop()

 

저는 Python을 취미 삼아 공부하는 연식이 꽤 지난 어른아이로서,
언제 어디서나 공부한 내용을 찾아보기 쉽도록 나름대로 정리하여 블로그에 포스팅하고 있습니다.

이 글을 공유합시다

facebook twitter kakaoTalk kakaostory naver band