# 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體重過輕$$ ::: ![](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用來作筆記看起來非常不錯,整個排版讓人覺得很舒服,總的來說我覺得將近半個學期的學習收穫還是頗多。