파이썬에 내장되어 있는 Tkinter 모듈을 통해 간단한 GUI 형식의 계산기를 만들 수 있다.
from tkinter import *
window = Tk() # 윈도우 생성
window.mainloop() # 실행(루프 생성)
여기에 코드들을 추가하여 계산기의 기능과 시각적 요소들을 넣어주면 된다.
from tkinter import *
window = Tk() # 윈도우 생성
# label 에 텍스트를 넣어 정보를 표시한다.
l1 = Label(window, text = "입력")
l1.pack()
# entry로 입력받을 수 있는 공간을 지정한다.
e1 = Entry(window)
e1.pack()
# button으로 다음 동작을 이어나갈 수 있도록 한다.
b1 = Button(window, text = "확인")
b1.pack()
window.mainloop()
필요한 기능과 요소를 생각하며 아래 코드를 작성한다.
from tkinter import *
window = Tk()
window.geometry('300x200') # 창 크기 지정
# 창 크기 변경 못하도록 설정
window.resizable(width=False, height=False)
# Label 로 프로그램 안내하는 정보 출력, place로 위치 고정
l1 = Label(window, text = "BMI 계산기")
l2 = Label(window, text = "키: ")
l3 = Label(window, text = "체중: ")
l4 = Label(window, text = "나의 체질량지수(BMI): ")
l5 = Label(window, text = "m")
l6 = Label(window, text = "kg")
# .pack() 대신 .place(x, y)를 이용하면 원하는 위치에 위치시킬 수 있다.
l1.place(x=5, y=10)
l2.place(x=20, y=50)
l3.place(x=20, y=80)
l4.place(x=10, y=160)
l5.place(x=230, y=50)
l6.place(x=230, y=80)
# 입출력 칸을 Entry로 생성, place로 위치 고정
e1 = Entry(window)
e2 = Entry(window)
e3 = Entry(window)
e1.place(x=75, y=50)
e2.place(x=75, y=80)
e3.place(x=140, y=160)
# 계산하기, 다시하기 버튼 생성 및 이벤트 처리, place로 위치 고정
b1 = Button(window, text = "계산하기")
b2 = Button(window, text = "다시하기")
b1.place(x=140, y=115)
b2.place(x=225, y=115)
window.mainloop()
코드를 실행하면 아래의 결과가 나온다.
버튼을 눌렀을 때 이벤트를 주어서 기능을 수행한다.
계산하기
를 누르면 입력 값을 읽고, 계산을 수행하고, 결과를 표시해야 한다.
다시하기
를 누르면 Entry
에 있는 모든 텍스트를 지워준다.
이벤트 구현은 함수를 만든 뒤 버튼을 정의할 때 command=(함수 이름)
을 넣어준다.
```from tkinter import *
def calculate(): # BMI를 계산하는 함수
le = float(e1.get())
we = float(e2.get())
bmi = we/(le*le) # BMI 계산
bmi = round(bmi, 1) # BMI를 소수점 둘째자리에서 반올림
bmii = '' # BMI로 체중상태 판정
if bmi <= 18.5:
bmii = '저체중'
elif bmi < 25:
bmii = '정상'
elif bmi < 30:
bmii = '과체중'
else:
bmii = '비만'
e3.delete(0, len(e3.get())) # 결과 출력 전 창 비우기
e3.insert(0, bmii+"(" + str(bmi) + ")") # 결과 출력
def retry(): # 입출력 창을 초기화 하는 함수
e1.delete(0, len(e1.get()))
e2.delete(0, len(e2.get()))
e3.delete(0, len(e3.get()))
window = Tk()
window.geometry('300x200') # 창 크기 지정
# 창 크기 변경 못하도록 설정
window.resizable(width=False, height=False)
# Label 로 프로그램 안내하는 정보 출력, place로 위치 고정
# 선언할 때 글자 색상과 폰트를 설정할 수 있다.
l1 = Label(window, text = "BMI 계산기",
fg = "orange", font = "helvetica 16 bold")
l2 = Label(window, text = "키: ")
l3 = Label(window, text = "체중: ")
l4 = Label(window, text = "나의 체질량지수(BMI): ")
l5 = Label(window, text = "m")
l6 = Label(window, text = "kg")
# .pack() 대신 .place(x, y)를 이용하면 원하는 위치에 위치시킬 수 있다.
l1.place(x=5, y=10)
l2.place(x=20, y=50)
l3.place(x=20, y=80)
l4.place(x=10, y=160)
l5.place(x=230, y=50)
l6.place(x=230, y=80)
# 입출력 칸을 Entry로 생성, place로 위치 고정
e1 = Entry(window)
e2 = Entry(window)
e3 = Entry(window)
e1.place(x=75, y=50)
e2.place(x=75, y=80)
e3.place(x=140, y=160)
# 계산하기, 다시하기 버튼 생성 및 이벤트 처리, place로 위치 고정
# 클릭 시 함수 calculate를 실행한다.
b1 = Button(window, text = "계산하기", command=calculate)
# 클릭 시 함수 retry를 실행한다.
b2 = Button(window, text = "다시하기", command=retry)
b1.place(x=140, y=115)
b2.place(x=225, y=115)
window.mainloop()
e1.get()
으로 Entry
에 있는 텍스트를 읽는다.e1.insert(시작 위치, 텍스트)
으로 Entry
에 텍스트를 삽입한다.e1.delete(시작 위치, 끝 위치)
으로 Entry
의 해당 범위 안의 텍스트를 지울 수 있다.실행하면 아래의 결과 창이 나타난다.
좋아하는 남자 배우인 김수현의 프로필 정보를 입력해 보았다.
결과는 저체중 직전의 정상 상태이다.
지금 찍는 드라마를 보니 살이 더 빠진 것 같아서 저체중일 것 같다..
아무튼 파이썬은 정말 만능 언어인 것 같다.
지금은 그대로 따라서 코드를 입력해봤지만 여기서 변형해보는 연습을 많이 해봐야겠다.
백지 상태에서 스스로 코딩하지 못하면 내 실력이 아니기 때문에..
웹 크롤링도 해보고 있는데 정리가 되는 대로 올려야겠다!