Python(英文のデータベース化007: GUI_tkinterの試し)
■Graphical User Interface(GUI)の試し。
英文のデータベース化を行うアプリをWindowsアプリケーションのようにできないかと思い、今回GUIのPythonのパッケージを使ってみる。tkinterは標準でpythonに入っているそうなので、これを使う。
やりたいこととして、次のようなものを考えてる。
・英文のテキストファイルをファイルダイアログで選択・読み込み
・英文の分解、データベース登録をボタンで実行
・三人称単数や過去形、進行形など処理が必要なものをラベル上で選択
今回はtkinterの試しとして、簡単なサンプルプログラムを作った。
サンプルプログラムは、2次関数(y = a * x^2 + b * x + c)の a, b, c の値をテキストボックスから入力してボタンを押すと x = -20 ~ 20 のグラフを表示するというもの。
コードは下の通り。
import tkinter as ttk
import matplotlib.pyplot as plt
FILENAME = 'sample017.png'
START_VAR = -20
END_VAR = 20
##############################
# バージョン確認
var = ttk.Tcl().eval('info patchlevel')
print(var)
##############################
##############################
# ファイルとして保存
def save_graph(var_a, var_b, var_c):
x = []
y = []
plt.figure(figsize=(3.2, 2))
for i in range(START_VAR, END_VAR):
x.append(i)
y.append(int(var_a) * (i ** 2) + int(var_b) * i + int(var_c))
print(x)
print(y)
plt.plot(x, y)
plt.tight_layout()
plt.savefig(FILENAME)
##############################
##############################
# ボタンを押した際の動き
def button1_method():
save_graph(widgt2.get(), widgt3.get(), widgt3.get())
img = ttk.PhotoImage(file=FILENAME)
widgt6.configure(image=img)
widgt6.image=img
##############################
root = ttk.Tk()
root.title('Function')
root.geometry("340x300")
root.resizable(0, 0)
frame = ttk.Frame(root, borderwidth =10)
frame.grid(column=4, row=4)
widgt1 = ttk.Label(frame, text="y = a * x^2 + b * x + c")
widgt2 = ttk.Entry(frame, text="a", width=10)
widgt3 = ttk.Entry(frame, text="b", width=10)
widgt4 = ttk.Entry(frame, text="c", width=10)
widgt5 = ttk.Button(frame, text="Show", bg="white", command=lambda: button1_method())
widgt6 = ttk.Label(frame)
widgt1.grid(column=0, row=0, columnspan=4)
widgt2.grid(column=0, row=1)
widgt3.grid(column=1, row=1)
widgt4.grid(column=2, row=1)
widgt5.grid(column=3, row=1)
widgt6.grid(column=0, row=2, columnspan=4)
root.mainloop()
コードの実行後、テキストボックスへ値を入力してボタンを押すと下のようになる。
フレーム(Frame)の上に6つのウィジット(ラベル_Label 2、テキストボックス_Entry 3、ボタン_Button 1)を置いている。4×4のgridを使って、適宜 columnspanで隣同士のセルを結合して、レイアウトを下の赤枠のように作っている。
ボタンの実行時の動きは、command=lambda: button1_method() で定義した関数を使う。ボタンを押すと、テキストボックスに入っている値を取得し、それらを別の関数save_graphに入れ、 matplotlibパッケージを使ってグラフを出力、保存する。その保存ファイルを読み取り、widgt6に差し替える。
今回はtkinterのサンプルまで。