---
# System prepended metadata

title: Python學習筆記

---

# Python學習筆記
## tkinter+function應用
Tkinter 程式視窗設計的ＢＭＩ 計算程式
$$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體重過輕$$
:::
![](https://i.imgur.com/ecghN4E.png)

:::info
$$18.5\le BMI\lt24,標準體位$$
:::
![](https://i.imgur.com/Ktw8WG1.png)

:::warning
$$24\le BMI\lt27,過重$$
:::
![](https://i.imgur.com/X04n1u8.png)

:::danger
$$27\le BMI\lt30,輕度肥胖$$
:::
![](https://i.imgur.com/EhUefap.png)

:::success
$$30\le BMI\lt35,中度肥胖$$
:::
![](https://i.imgur.com/S6uNnH2.png)

:::info
$$BMI\ge35,重度肥胖$$
:::
![](https://i.imgur.com/alAB9NA.png)

```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用來作筆記看起來非常不錯，整個排版讓人覺得很舒服，總的來說我覺得將近半個學期的學習收穫還是頗多。


