# BMI計算機使用tkinter ### 安裝需要的模組 #### Pillow模組:用來載入圖片 ``` pip3 install Pillow ``` #### tkinter模組: ##### MacOS下安裝 ``` $ brew install tcl-tk ``` > tkinter為系統層級的模組,所以無法透過pip來安裝。 ##### Windows下安裝 安裝Anaconda後預設已經安裝tkinter。 ##### 測試是否有安裝tkinter模組 ``` $ python3 -m tkinter -c 'tkinter._test()' ``` ##### tkinter版本 ``` $ python3 -m tkinter -c 'tkinter.TkVersion' ``` ### 完整程式碼 ``` import tkinter as tk from PIL import Image, ImageTk import math window = tk.Tk() window.title('BMI App') window.geometry('600x400') window.configure(background='white') # 透過PIL模組開啟圖片 img = Image.open('pic.jpg') # 透過PIL模組來建立PhotoImage物件,即可正常載入圖片 photo = ImageTk.PhotoImage(img) def resize(img2, w, h): size = (w, h) resized = img.resize(size) img2 = ImageTk.PhotoImage(resized) return img2 photo = resize(photo, 600, 100) bk_label = tk.Label(window, image=photo) # bk_label.config(width='600', height='100') bk_label.pack(expand=False) # 計算bmi並顯示結果 def calculate_bmi_number(): height = float(height_entry.get()) weight = float(weight_entry.get()) print(height, weight, math.pow(height, 2)) bmi_value = round(weight / math.pow(height/100, 2), 2) print(bmi_value) result = '你的 BMI 指數為:{} {}'.format(bmi_value, get_bmi_status_description(bmi_value)) result_label.configure(text=result) # 顯示評語 def get_bmi_status_description(bmi_value): if bmi_value < 18.5: return '體重過輕囉,多吃點!' elif bmi_value >= 18.5 and bmi_value < 24: return '體重剛剛好,繼續保持!' elif bmi_value >= 24 : return '體重有點過重囉,少吃多運動!' # 大標題 header_label = tk.Label(window, text='BMI計算機', font='_ 30') header_label.pack() # 身高輸入區域 height_frame = tk.Frame(window) height_frame.pack(side=tk.TOP, pady=10) # 身高文字標籤 height_label = tk.Label(height_frame, text='身高(m)', font='_ 30') height_label.pack(side=tk.LEFT) # 身高輸入框 height_entry = tk.Entry(height_frame, font='_ 30') height_entry.insert(0, '0') height_entry.pack(side=tk.LEFT) # 體重輸入區域 weight_frame = tk.Frame(window) weight_frame.pack(side=tk.TOP) # 體重文字標籤 weight_label = tk.Label(weight_frame, text='體重(kg)', font='_ 30', foreground='black', bg='white') weight_label.pack(side=tk.LEFT) # 體重輸入框 weight_entry = tk.Entry(weight_frame, font='_ 30') weight_entry.insert(0, '0') weight_entry.pack(side=tk.LEFT) # 顯示計算結果的label result_label = tk.Label(window, font='_ 20') result_label.pack() # 計算按鈕 calculate_btn = tk.Button(window, text='馬上計算', command=calculate_bmi_number, font='_ 20', foreground='#00ff00', background='blue') calculate_btn.pack() window.mainloop() ``` > 注意: > 為了載入圖片,程式碼目錄下必須有一個pic.jpg圖片檔案存在。