파이썬/파이썬(python) 중급

[27-8 파이썬] Tkinter로 m2 평 변환기 만들기, 데이터유형 변경하기

Olivia-BlackCherry 2022. 9. 15. 16:48

오늘은 Tkinter을 사용해서 

제곱미터를 평으로 바꾸는 변환기를 만들어보자!

 

 

1. 윈도우 생성
from tkinter import *

window= Tk()
window.title("m2 > Pyeong")
window.minsize(width=250, height= 100)

window.mainloop()

 

 

2. 컴포넌트 생성
from tkinter import *

window= Tk()
window.title("m2 > Pyeong")
window.minsize(width=250, height= 100)

entry = Entry(width=10)

m2_label = Label(text = "m2")

equal_label= Label(text = "is equal to")

cal_km_label = Label(text="0")

pyeong_label = Label(text="pyeong")

calculate_button = Button(text="Calculate")

window.mainloop()

 

 

3. 레이아웃(배치)

배치 메소드 pack, place, grid 중 grid를 사용할 건데, 

 

grid는 컴포넌트 간 배치를 자동으로 고려하기에,

행과 열을 계산하여,

먼저 위치시키고 싶은 것부터 차례로 배치하는 것이 좋으며

 

이렇듯 레이아웃을 전부 배치한다음 

세부 디자인을 변경하는 것을 추천한다.

from tkinter import *

window= Tk()
window.title("m2 > Pyeong")
window.minsize(width=250, height= 100)

entry = Entry(width=5)
entry.grid(column=1, row=0)

m2_label = Label(text = "m2")
m2_label.grid(column=2, row=0)

equal_label= Label(text = "is equal to")
equal_label.grid(column=0, row=1)

cal_km_label = Label(text="0")
cal_km_label.grid(column=1, row=1)

pyeong_label = Label(text="pyeong")
pyeong_label.grid(column=2, row=1)

calculate_button = Button(text="Calculate")
calculate_button.grid(column=1, row=2)

window.mainloop()

 

 

4. 여백주기

config 메소드의 파라미터 padx, pady로 여백을 지정한다.

window.config(padx=20, pady=20)

 

 

5. 실제 기능 추가하기

1) 데이터유형 바꾸기 : str -> float

def m2_to_pyeong():
  m2 = float(entry.get())
  pyeong = m2 *0.3025
  cal_km_label.config(text = f"{pyeong}")

여기서 중요한 것은 

entry.get()의 데이터유형이 str이라는 점이다.

str은 다른 데이터유형(0.3025)과 수학 연산이 어렵다. 

때문에 float()함수로 데이터유형을 실수로 전환한다.

 

2) f -string 쓰기

config의 파라미터 text는 str타입만 취할 수 있다.

그런데 지금 pyeong은 float 타입이다. 

따라서,

f-string으로 어떤 데이터유형에도 관계없이 실행되도록 데이터타입을 바꾼다. 

 

 

<최종코드>

from tkinter import *

window= Tk()
window.title("m2 > Pyeong")
window.minsize(width=250, height= 100)
window.config(padx=20, pady=20)

def m2_to_pyeong():
  m2 = float(entry.get())
  pyeong = m2 *0.3025
  cal_km_label.config(text = f"{pyeong}")

entry = Entry(width=5)
entry.grid(column=1, row=0)

m2_label = Label(text = "m2")
m2_label.grid(column=2, row=0)

equal_label= Label(text = "is equal to")
equal_label.grid(column=0, row=1)

cal_km_label = Label(text="0")
cal_km_label.grid(column=1, row=1)

pyeong_label = Label(text="pyeong")
pyeong_label.grid(column=2, row=1)

calculate_button = Button(text="Calculate", command = m2_to_pyeong)
calculate_button.grid(column=1, row=2)

window.mainloop()