簡単な入力フォームを表示させて、入力したデータをExcelファイルに自動追加するプログラムを作ってみましょう。
下のYouTubeの埋め込みで、プログラムの動きやコーディングをわかりやすく解説しています。せひご参照ください。
サンプルファイルは下のボタンからダウンロードできます。
プログラムの動作の確認
form_copy.pyというファイルと商品リストというエクセルファイルがあります。
form_copy.pyを実行すると、入力フォームが現れます。そこにデータを入力します。
プログラム終了をクリックすると、自動でエクセルファイルにデータが入力されています。
コードの解説
import pandas as pd
import tkinter as tk
import sys
item_list=[]
def insertData():
item_list.append([id_text.get("1.0","end"),name_text.get("1.0","end"),price_text.get("1.0","end")])
#テキストボックスの値を削除する
id_text.delete("1.0","end")
name_text.delete("1.0","end")
price_text.delete("1.0","end")
def endProgram():
df=pd.read_excel("商品リスト.xlsx")
#Excelファイルに追加できるように変換
insert_data=pd.DataFrame(item_list,columns=df.columns)
df=pd.concat([df,insert_data])
#Excelファイルに書き出し
with pd.ExcelWriter("商品リスト.xlsx") as writer:
df.to_excel(writer,index=False)
#プログラム終了
sys.exit()
root=tk.Tk()
root.title("商品データ登録")
#サイズの設定
root.geometry("750x150")
#GUI部品の配置を設定
root.grid()
#ラベル
id_label=tk.Label(root,text="商品番号")
name_label=tk.Label(root,text="商品名")
price_label=tk.Label(root,text="単価")
#テキストボックス
id_text=tk.Text(root,borderwidth=1,height=1,relief="ridge")
name_text=tk.Text(root,borderwidth=1,height=1,relief="ridge")
price_text=tk.Text(root,borderwidth=1,height=1,relief="ridge")
#ボタン
insert_button=tk.Button(root,text="データ追加",command=insertData)
append_button=tk.Button(root,text="プログラム終了",command=endProgram)
#部品を配置
id_label.grid(row=1, column=1)
id_text.grid(row=1, column=2)
name_label.grid(row=2, column=1)
name_text.grid(row=2, column=2)
price_label.grid(row=3, column=1)
price_text.grid(row=3, column=2)
insert_button.grid(row=4, column=1)
append_button.grid(row=4, column=2)
#ウインドウを表示
root.mainloop()
最初にフォームを作成します。 Tk関数でウィンドウを作成して変数 rootに入れ、タイトルやサイズなどを設定していきます。Tkinter を利用すると、 ウィンドウにテキストボックスやボタン、リストボックスなどを配置し、ユーザーの操作に応じて関数などを実行することができます。
Tkinter は Python の標準ライブラリに付属しているので、 追加インストールは不要です。 import文で取り込むだけで利用できます。
最後のgridメソッドは部品の配置方法を設定するためのものです。 このメソッドを呼び出すと、行(row) と列 (column) を指定しながら各部品を配置できるようになります。
画面上に配置する部品を作成していきます。 作成した部品は変数に入れます。種類を区別しやすいよう、それぞれ「_label」 「_text」 「_button」という名前の変数に入れていきます。
次にテキストボックスを作成します。 引数のborderwidth は枠の太さ、height は高さ(行数) relief は浮き彫り効果のことで、立体感のある装飾にします。
ボタンは、引数 text にボタンに表示する文字列を指定し、引数commandにクリック時に呼び出す関数の名前を指定します。
部品が用意できたら、それをウィンドウ上に配置していきます。 部品を入れた変数のgrid メソッドを呼び出し、 row (行) と column (列) を指定していきます。
細かい調整はTkinterがやってくれるから、大まかな配置を指定すればOKです。 一番左上に配置したければ 「row=1,
column=1」、 その隣に表示したければ 「row=1,column=2」という具合に指定していきましょう。
配置が終わったらmainloopメソッドを呼び出します。 これはとても重要なメソッドで、最後にこれを書かないとウィンドウが表示されません。
テキストボックスからテキストを取得するにはgetメソッドを利用します。
2つの引数で取得範囲の先頭と末尾を表し、すべてのテキストを取得したい場合は 「”1.0″, “end”」と指定します。
入力データをリストに追加したら、次のデータを入力しやすいよう、テキストボックス内のテキストをdeleteメソッドで削除します。 引数の指定方法はget メソッドと同じです。
endProgram 関数は、[プログラム終了] ボタンがクリックされたときに呼び出されます。 pandas を利用して Excelファイルにデータを追記し、プログラムを終了します。