저는 Python을 취미 삼아 공부하는 연식이 꽤 지난 어른아이로서,
언제 어디서나 공부한 내용을 찾아보기 쉽도록 제 나름대로 정리하여 블로그에 포스팅하고 있습니다.
파이썬의 Tkinter 모듈를 활용하여 GUI 프로그램을 만들어 봅니다.
Entry() 위젯으로 실행화면을 만듭니다.
Button() 위젯으로 숫자와 계산 버튼을 만듭니다.
grid() 속성으로 위젯의 위치를 정의합니다.
버튼의 command() 속성으로 버튼과 함수를 연결합니다.
버튼의 "lambda 표현식"으로 숫자 버튼에서 단 한번만 쓰이는 임시함수를 정의합니다.
Entry() 화면에 insert()와 delete() 속성으로 값을 추가하거나 삭제해 봅니다.
"grobal (전역)변수"로 입력받은 숫자를 / , *, -, + 로 받아오는 함수를 정의합니다.
num_equal() 함수에서 "grobal (전역)변수"로 받아온 값의 계산식을 정의합니다.
Entry() 화면에 표시합니다.
앞서 공부한 내용을 바탕으로 왜 이런 결과가 나오는지 시행착오를 겪으면서 대략 2시간 정도 소요되었습니다.
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을 취미 삼아 공부하는 연식이 꽤 지난 어른아이로서,
언제 어디서나 공부한 내용을 찾아보기 쉽도록 나름대로 정리하여 블로그에 포스팅하고 있습니다.