pythonでどのようなアプリケーションが作成できるのでしょうか?
このような疑問点にお応えします。
PythonライブラリTkinterを用いて、デスクトップ形式のアプリケーションを作成してみます。
今回は、BMI計算ツールを作成してみましょう。
BMI(Body Mass Index)とは、体重と身長の関係から算出される、
ヒトの肥満度を表す体格指数である。(wikipediaより抜粋。)
アプリケーションの構成は、以下になります。
身長と体重を入力するためのフォームを用意し、数値が正常に入力された状態でOKボタンを押しますと計算結果を表示します。
数値以外の入力あるいは、無入力の場合は、警告メッセージを表示します。
CLEARボタンを押すことで、入力状態をクリアすることができます。
ソースコードを記載しますので、ソースコードを編集してみて、どのような影響があるのか確認するのも良いと思います。python 3.7.1を使用しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
# coding: utf-8 import tkinter as tk import tkinter.ttk as ttk from tkinter import messagebox as mbox class Bmi_calc: def __init__(self): # ウィンドウ設定 self.win = tk.Tk() self.win.title(u'BMI計算ツール') self.win.minsize(width=250, height=300) self.win.maxsize(width=250, height=300) # ラベル設定 self.label = tk.Label(self.win, text=u'BMI') self.label.grid(row=0, column=0) # 入力フォーム設定 身長 self.height_label = tk.Label(self.win, text='身長(cm):') self.height_label.grid(row=1, column=0) self.height_form = tk.Entry(self.win) self.height_form.grid(row=1, column=6) self.height_form.insert(tk.END, '160') # 入力フォーム設定 体重 self.weight_label = tk.Label(self.win, text='体重(kg):') self.weight_label.grid(row=2, column=0) self.weight_form = tk.Entry(self.win) self.weight_form.grid(row=2, column=6) self.weight_form.insert(tk.END, '60') # ボタン配置 tk.Button(self.win, text='OK', command=self.okButton_click).grid(row=3, column=0) tk.Button(self.win, text='CLEAR', command=self.cancelButton_click).grid(row=3, column=6) # 結果表示 self.result_label = tk.Label(self.win, text='') self.result_label.grid(row=4, column=6) # 表出力設定 columns = ('BMI', u'肥満度(%)') self.table = ttk.Treeview(self.win, columns=columns) self.table.place(x=10, y=110) # ヘッダー self.table.heading("#0", text='') self.table.heading('BMI', text='BMI') self.table.heading(u'肥満度(%)', text=u'肥満度(%)') # サイズ self.table.column("#0", width=0, stretch = False, anchor=tk.CENTER) self.table.column('BMI', width=114, stretch = False, anchor=tk.CENTER) self.table.column(u'肥満度(%)', width=114, stretch = False, anchor=tk.CENTER) def okButton_click(self): height_data = self.height_form.get() weight_data = self.weight_form.get() if self.is_num(height_data) and self.is_num(weight_data): h = float(height_data) / 100.0 w = float(weight_data) bmi = w / h ** 2 rw = h ** 2 * 22 per = (w / rw * 100.0) - 100.00 # self.result_label['text'] = "肥満{0}% (bmi={1:.2f})".format(per, bmi) self.table.insert("", "end", values=(round(bmi, 2), round(per, 2))) else: mbox.showinfo(u'入力エラー', u'数値を入力してください。') def cancelButton_click(self): self.height_form.delete(0, tk.END) self.weight_form.delete(0, tk.END) for item in self.table.get_children(): self.table.delete(item) def start_loop(self): self.win.mainloop() def is_num(self, value): try: float(value) except ValueError: return False else: return True if __name__ == '__main__': sampleBox = Bmi_calc() sampleBox.start_loop() |