안녕하세요.
파이썬을 공부하는 가정의학과 전문의
닥터 배도사입니다.
오늘은 파이썬 tkinter를 이용하여
키와 몸무게를 입력하면
BMI와 그 판정 결과(정상, 과체중, 비만)가
출력되는 프로그램을
만들어 보도록하겠습니다.
파이썬으로 tkinter 모듈을 사용하여
BMI 계산기를 GUI로 구현하는
전반적인 코드는 위 사진과 같습니다.
그럼 지금부터 코드를
구간별로 나누어 상세히 알아보도록 하겠습니다.
import tkinter as tk from tkinter import ttk # 윈도우 창 생성 win = tk.Tk() win.geometry('300x200') win.resizable(width=False, height=False) |
import tkinter as tk
from tkinter import ttk
tkinter 모듈을 tk라는 이름으로 불러와 줍니다.
tkinter에서 향상된 버전인 ttk를 불러옵니다.
win = tk.Tk()
win.geometry('300x200')
윈도우 창을 생성하고 크기를 설정합니다.
win.resizable(width=False, height=False)
크기는 변하지 않게 설정해 줍니다.
# 키와 몸무게를 입력하라는 label과 entry를 만들고 # 결과를 출력하는 label과 entry를 만들고 # grid로 위치를 배열한다. lb1 = ttk.Label(win, text = "BMI 계산기") lb1.grid(row=0,column=0) lb2 = ttk.Label(win, text = "키: ") lb2.grid(row=1,column=0) lb3 = ttk.Label(win, text = "체중: ") lb3.grid(row=2,column=0) lb4 = ttk.Label(win, text = "나의 체질량지수(BMI): ") lb4.grid(row=3,column=0) lb5 = ttk.Label(win, text = "cm") lb5.grid(row=1,column=2) lb6 = ttk.Label(win, text = "kg") lb6.grid(row=2,column=2) ent1 = ttk.Entry(win) ent1.grid(row=1, column=1) ent2 = ttk.Entry(win) ent2.grid(row=2, column=1) ent3 = ttk.Entry(win) ent3.grid(row=3, column=1) |
lb1 = ttk.Label(win, text = "BMI 계산기")
lb1.grid(row=0,column=0)
"BMI 계산기"라는 텍스트를 가진 라벨을 만들어
grid를 이용하여 0행 0열에 위치시킵니다.
lb2 = ttk.Label(win, text = "키: ")
lb2.grid(row=1,column=0)
"키:"라는 텍스트를 가진 라벨을 만들어
grid를 이용하여 1행 0열에 위치시킵니다.
lb3 = ttk.Label(win, text = "체중: ")
lb3.grid(row=2,column=0)
"체중:"라는 텍스트를 가진 라벨을 만들어
grid를 이용하여 2행 0열에 위치시킵니다.
lb4 = ttk.Label(win, text = "나의 체질량지수(BMI): ")
lb4.grid(row=3,column=0)
"나의 체질량지수(BMI):"라는 텍스트를 가진 라벨을 만들어
grid를 이용하여 3행 0열에 위치시킵니다.
lb5 = ttk.Label(win, text = "cm")
lb5.grid(row=1,column=2)
"cm:"라는 텍스트를 가진 라벨을 만들어
grid를 이용하여 1행 2열에 위치시킵니다.
lb6 = ttk.Label(win, text = "kg")
lb6.grid(row=2,column=2)
"kg"라는 텍스트를 가진 라벨을 만들어
grid를 이용하여 2행 2열에 위치시킵니다.
ent1 = ttk.Entry(win)
ent1.grid(row=1, column=1)
키(cm)를 입력받는 엔트리를 ent1이라는 변수로 생성하고
grid를 이용하여 1행 1열에 위치시킵니다.
ent2 = ttk.Entry(win)
ent2.grid(row=2, column=1)
몸무게(kg)를 입력받는 엔트리를 ent2이라는 변수로 생성하고
grid를 이용하여 1행 1열에 위치 시킵니다.
ent3 = ttk.Entry(win)
ent3.grid(row=3, column=1)
결과(bmi 결과와 판정)를 입력받는 엔트리를 ent3이라는 변수로 생성하고
grid를 이용하여 1행 1열에 위치시킵니다.
# ent1,2에서 입력받은 키와 몸무게의 갑을 가지고 # BMI를 계산하고 # 결과를 판정하며 # 그 결과를 ent3으로 출력하는 함수 def bmi_cal(): height = float(ent1.get()) weight = float(ent2.get()) bmi = weight/((height/100)**2) bmi = round(bmi, 1) if bmi <= 18.5: bmi_result = '저체중' elif bmi < 25: bmi_result = '정상' elif bmi < 30: bmi_result = '과체중' else: bmi_result = '비만' ent3.insert(0, bmi_result + "(" + str(bmi) + ")") # 결과 출력 |
ent1, 2에서 입력받은 키와 몸무게의 갑을 가지고
BMI를 계산하고 결과를 판정하여 그 결과를 ent3에 출력하는 함수를 정의해 줍니다.
def bmi_cal():
bmi_cal라는 함수를 아래와 같이 정의합니다.
height = float(ent1.get())
height라는 변수에 ent1에 입력한 숫자를 실수형으로 받아 할당합니다.
weight = float(ent2.get())
weight라는 변수에 ent2에 입력한 숫자를 실수형으로 받아 할당 합니다.
bmi = weight/((height/100)**2)
입력받은 키와 몸무게를 이용하여 공식에 따라 bmi를 계산하여
bmi라는 할당합니다.
bmi = round(bmi, 1)
bmi 결괏값을 소수점 이하 1자리까지 반올림합니다.
if bmi <= 18.5:
bmi_result = '저체중'
elif bmi < 25:
bmi_result = '정상'
elif bmi < 30:
bmi_result = '과체중'
else:
bmi_result = '비만'
if 구문 이용하여 bmi 결과에 따라
저체중, 정상, 과체중, 비만으로 분류하고
그 결과를 bmi_result라는 변수에 할당합니다.
ent3.insert(0, bmi_result + "(" + str(bmi) + ")") # 결과 출력
ent1, 2에 입력된 키와 몸무게를 가지고 계산된 bmi, bmi_result를
ent3에 출력해 줍니다. 이때 insert 명령어를 이용해 줍니다.
# ent1,2의 입력값과 ent3의 출력값을 초기화 하는 함수. def retry(): ent1.delete(0, len(ent1.get())) ent2.delete(0, len(ent2.get())) ent3.delete(0, len(ent3.get())) |
키와 몸무게를 입력하여 bmi를 구하고 나서
다시 키와 몸무게를 입력하기 위해서는
기존에 입력했던 수치와 결과를 삭제하여 reset 하는 것이 필요합니다.
이러한 동작을 retry()라는 함수로 정의해 줍니다.
def retry():
ent1.delete(0, len(ent1.get()))
ent2.delete(0, len(ent2.get()))
ent3.delete(0, len(ent3.get()))
retry 함수를 실행하면
ent1, 2, 3에 입력한 숫자의 길이만큼 삭제해 줍니다.
# button을 만들어 클릭 시 함수 bmi_cal이 실행되도록 한다. btn1 = ttk.Button(win, text = "계산하기", command=bmi_cal) btn1.grid(row=4, column=0) # button을 만들어 클릭 시 함수 retry가 실행되도록 한다. btn2 = ttk.Button(win, text = "다시하기", command=retry) btn2.grid(row=4, column=1) win.mainloop() |
버튼을 만들어 클릭했을 때 앞서 만든 bmi_cal, retry 함수가 실행되도록 해줍니다.
btn1 = ttk.Button(win, text = "계산하기", command=bmi_cal)
btn1이라는 버튼을 만듭니다. 계산하기라는 텍스트를 넣고
command 명령어를 이용하여 클릭했을 때 bmi_cal 함수가 시행되게 해 줍니다.
btn1.grid(row=4, column=0)
btn1을 grid를 이용하여 4행 0열에 위치시켜 줍니다.
btn2 = ttk.Button(win, text = "다시하기", command=retry)
btn2이라는 버튼을 만듭니다. 다시하기라는 텍스트를 넣고
command 명령어를 이용하여 클릭했을 때 retry 함수가 시행되게 해 줍니다.
btn2.grid(row=4, column=1)
btn2을 grid를 이용하여 4행 1열에 위치시켜 줍니다.
자~ 그럼 프로그램 코딩이 다 완료되었습니다!
그럼 프로그램을 실행해 보겠습니다.
동영상에서 보시는 바와 같이
키와 몸무게를 넣는 entry에 키(173) cm와 몸무게(70) kg를 입력하고 계산하기를 누르면
그 결과로써 bmi 22.9, 정상 판정이 나오는 것을 확인할 수 있습니다.
다시하기를 누르면 입력창이 빈칸이 되며
키와 몸무게를 입력 한 후 계산하기를 누르면 bmi가 계산이 됩니다.
간단하지만 스스로 bmi 계산 프로그램을 GUI로 구현했다는 사실이 기쁩니다.
앞으로도 계속 공부하여 내가 생각하는 프로그램을
만들어 보고자 합니다!
파이팅~!!!
'tkinter' 카테고리의 다른 글
[파이썬 tkinter] Radiobutton 사용하기 (0) | 2021.12.20 |
---|---|
[파이썬 tkinter] checkbutton 사용하기 (0) | 2021.12.20 |
파이썬을 이용하여 독학으로 만들어본 우울증 검사(PHQ-2) 프로그램 (2) | 2021.12.14 |
[파이썬 tkinter] entry, button 기능 사용하기 (0) | 2021.12.13 |
파이썬 GUI - label과 button 기능 사용하기 (0) | 2021.12.10 |