# Python學習筆記
## tkinter+function應用
Tkinter 程式視窗設計的BMI 計算程式
$$BMI=\frac{體重}{身高^2}$$
|成人肥胖定義|身體質量指數(BMI)(kg/mg^2)|
|-----|--------|
|體重過輕|BMI<18.5|
|健康體位|18.5<=BMI<24|
|過重|24<=BMI<27|
|輕度肥胖|24<=BMI<30|
|中度肥胖|30<=BMI<35|
|重度肥胖|BMI>=35|
```mermaid
graph TD;
輸入身高體重-->求出BMI;
求出BMI-->體重過輕;
求出BMI-->健康體位;
求出BMI-->體位異常;
體位異常-->過重;
體位異常-->輕度肥胖;
體位異常-->中度肥胖;
體位異常-->重度肥胖;
```
## 執行結果
:::success
$$BMI\lt 18.5體重過輕$$
:::

:::info
$$18.5\le BMI\lt24,標準體位$$
:::

:::warning
$$24\le BMI\lt27,過重$$
:::

:::danger
$$27\le BMI\lt30,輕度肥胖$$
:::

:::success
$$30\le BMI\lt35,中度肥胖$$
:::

:::info
$$BMI\ge35,重度肥胖$$
:::

```python=
import tkinter as tk
from tkinter import messagebox
root = tk.Tk() # 建立 tkinter 視窗物件
root.configure(background='#f7890a') # 設定背景色黑色
root.title('BMI計算')
width = 600
height = 400
x = 100
y = 200
root.geometry(f'{width}x{height}+{x}+{y}') # 定義視窗的尺寸和位置
root.minsize(200, 100) # 設定視窗最小為 200x200
root.maxsize(800, 700) # 設定視窗最大為 500x500
root.resizable(True, False) # 設定 x 方向和 y 方向都不能縮放
H=tk.StringVar()
W=tk.StringVar()
#BMI計算函式
def BMI():
h=eval(H.get())
w=eval(W.get())
bmi=w/(h/100)**2
if bmi>=35:
health='重度肥胖'
elif bmi>=30:
health='中度肥胖'
elif bmi>=27:
health='輕度肥胖'
elif bmi>=24:
health='過重'
elif bmi>=18.5:
health='標準體位'
else:
health='過輕'
print('BMI={:.4f} {}'.format(bmi,health))
messagebox.showinfo('你的BMI為', 'BMI={:.4f} {}'.format(bmi,health))
#身高
body_height = tk.Label(root,
text='身高',
font=('',20,''),
fg='#d11528',
bg='#d1b215',
relief='sunken',
padx=15,pady=20)
#body_height.pack(side='left',anchor='nw',padx=10,pady=20)
body_height.place(x=20,y=40)
#體重
body_weight = tk.Label(root,
text='體重',
font=('',20,''),
fg='#d11528',
bg='#d1b215',
relief='sunken',
padx=15,pady=20)
#body_weight.pack(side='left',anchor='nw',padx=10,pady=20)
body_weight.place(x=20,y=150)
btn = tk.Button(root, text='BMI計算',
font=('',20,''),
fg='#d11528',
bg='#d1b215',
command=BMI) # 建立 Button 按鈕
btn.place(x=200,y=220)
entry_height = tk.Entry(root,
font=('',20,''),
fg='#d11528',
bg='#d1b215',
textvariable=H) # 放入單行輸入框
entry_height.place(x=250,y=20)
entry_weight = tk.Entry(root,
font=('',20,''),
fg='#d11528',
bg='#d1b215',
textvariable=W) # 放入單行輸入框
entry_weight.place(x=250,y=120)
root.mainloop() # 放在主迴圈中
###心得感想
經過這次寫程式的洗禮我發現果真不是一件容易的事,好多的東西都要經過思考,但是慢慢去接觸了解後卻又發現其實也沒有到非常困難,只要細檢查每檢查每一個環節通常都能順利執行成功;這個Hackmd用來作筆記看起來非常不錯,整個排版讓人覺得很舒服,總的來說我覺得將近半個學期的學習收穫還是頗多。