안녕하세요?
코딩을 공부하는 가정의학과 의사 닥터 배입니다~
오늘은 tkinter를 이용하여 계산기를 만들어 보겠습니다.
여러 유튜브 강의를 보면서 코드를 참고하여 만들었는데요.
여러 강의를 보다보니 정확한 출처를 확인하기가 어려운점 양해 드립니다~
코드를 실행하면 위와 같은 계산기가 나오도록 코딩을 하였습니다.
버튼을 누르면 제일 상단의 엔트리에 버튼 숫자와 기호가 입력이 되고
"=" 버튼을 누르면 계산 결과가 엔트리에 나옵니다.
계산기의 전반적인 코드는 다음과 같습니다!
from tkinter import *
# 계산 함수 만들기
def click(key):
if key == '=':
try:
result = eval(entry.get())
entry.delete(0, END)
entry.insert(END, str(result))
except:
entry.delete(0, END)
entry.insert(END, "오류!!!!!")
elif key == 'C':
entry.delete(0, END)
else:
entry.insert(END, key)
# 윈도우 창 만들기
window = Tk()
window.title("간단한 계산기")
window.geometry("800x600")
buttons = [ '7', '8', '9', '+', 'C',
'4', '5', '6', '-', ' ',
'1', '2', '3', '*', ' ',
'0', '.', '=', '/', ' ' ]
# for 구문 이용하여 버튼 배치 만들고 배치하기
i = 0
for b in buttons:
cmd = lambda x=b: click(x)
but = Button(window, width=10, height=3, text=b, command=cmd)
but.grid(row=i//5+1, column=i%5)
i += 1
# entry 창 만들고 배치하기
entry = Entry(window)
entry.grid(row=0, column=0, columnspan=5, ipadx=150, ipady=20)
window.mainloop()
# 계산 함수 만들기
def click(key):
if key == '=':
try:
result = eval(entry.get())
entry.delete(0, END)
entry.insert(END, str(result))
except:
entry.delete(0, END)
entry.insert(END, "오류!!!!!")
elif key == 'C':
entry.delete(0, END)
else:
entry.insert(END, key)
def click(key):
if key == '=':
try:
result = eval(entry.get())
entry.delete(0, END)
entry.insert(END, str(result))
먼저 click(key)라는 계산 함수를 만들어 줍니다.
key라는 매개변수가 "=" 이라면
reult라는 변수에 entry에 입력된 숫자를 계산한 값을 반환하고
기존에 entry에 입력되어 있던 값은 지우고
계산한 result 값을 string 형태로 입력합니다.
except:
entry.delete(0, END)
entry.insert(END, "오류!!!!!")
except 구분을 이용하여 try에서 시도했던 행위에 오류가 있을 때
entry에 있던 값을 지우고
"오류!!!" 라는 문자열을 entry에 입력합니다.
elif key == 'C':
entry.delete(0, END)
else:
entry.insert(END, key)
key라는 매개변수가 "="이 아니고 "c"일 때
entry에 입력된 값을 지웁니다.
그리고 key라는 매개 변수가 "=", "c" 가 아니고 나머지일 때
key라는 매개 변수를 entry의 끝에 입력합니다.
buttons = [ '7', '8', '9', '+', 'C',
'4', '5', '6', '-', ' ',
'1', '2', '3', '*', ' ',
'0', '.', '=', '/', ' ' ]
# for 구문 이용하여 버튼 배치 만들고 배치하기
i = 0
for b in buttons:
cmd = lambda key=b: click(key)
but = Button(window, width=10, height=3, text=b, command=cmd)
but.grid(row=i//5+1, column=i%5)
i += 1
buttons = [ '7', '8', '9', '+', 'C',
'4', '5', '6', '-', ' ',
'1', '2', '3', '*', ' ',
'0', '.', '=', '/', ' ' ]
계산기 버튼에 나타낼 숫자, 기호를 리스트로 만들어 줍니다.
위 계산기 사진에서 볼 수 있듯이
숫자 7은 0행, 0열, 숫자 4는 1행, 0열, 숫자 8은 0행 1열과 같이 배치됩니다.
i = 0
for b in buttons:
cmd = lambda key=b: click(key)
but = Button(window, width=10, height=3, text=b, command=cmd)
but.grid(row=i//5+1, column=i%5)
i += 1
먼저 i 라는 변수에 0을 담아 줍니다.
for 구문을 이용하여 buttons 변수에 있는 요소를 차례대로 b에 담아 줍니다.
cmd = lambda key=b: click(key)
앞서 정의한 click(key) 함수를 이용하여 버튼을 누를 때 해당 버튼에 해당하는 텍스트가 실행되도록 해줍니다.
이 때 labda 함수를 이용합니다.
labda 함수를 이용하여 key라는 매개 변수를 b 변수로 설정하고 click(key)가 실행되도록, click(b)가 실행되는 함수를 만들어서 cmd로 정의해 줍니다.
but = Button(window, width=10, height=3, text=b, command=cmd)
for 구분에 따라 받아온 b라는 변수를 텍스트로 하는 버튼을 만들고 cmd 함수를 연결시킵니다.
but.grid(row=i//5+1, column=i%5)
i += 1
but 버튼을 grid를 이용하여 배치합니다.
먼저 리스트 순서상 "7"은 위 코드와 함께 다음과 같이 시행이 됩니다.
i=0 이므로 행은 0/5+1=1, 열은 0을 5로 나눈 나머지인 0이 됩니다.
즉 7 버튼은 1행, 0열에 배치됩니다.
그리고 i에 1이 더해져 2가됩니다.
for 구분에 의해 다음으로 8이 b에 담깁니다.
이제 i=1이므로 행은 1/5+1=1, 열은 0을 5로 나눈 나머지인 1이 됩니다.
즉 8버튼은 1행, 1열에 배치됩니다.
i가 증가하고, 5로 나누기 때문에 이런 패턴으로
버튼이 배치가 됩니다.
# entry 창 만들고 배치하기
entry = Entry(window)
entry.grid(row=0, column=0, columnspan=5, ipadx=150, ipady=20)
window.mainloop()
entyr창을 만들어 0행, 0열에 배치합니다.
그럼 계산기를 실행해 보겠습니다.
'tkinter' 카테고리의 다른 글
위젯 배치 - pack() (0) | 2022.07.25 |
---|---|
Tkinter 기본 위젯 종류 (0) | 2022.07.23 |
[tkinter] BMI 계산기 만들기(ver.2) (0) | 2022.07.22 |
자기암시 GUI 프로그램 만들기(Tkinter) (0) | 2022.07.21 |
파이썬 tkinter, 우울증 간이검사 설문지 만들어 보기(feat. radiobutton) (0) | 2021.12.21 |