今日も見に来てくださって、ありがとうございます。石川さんです。
ここのところ、データサイエンス入門の勉強中です。データサイエンスで利用されるライブラリのpandasにあるDataFrameクラス、データを操作するのにいろいろな機能があって、とても便利です。ぼくは普段SQLを使っているので必要性はまったくないのですけど、Pythonでプログラミングするのに、覚えておくとよいですね。
tkinterも最近の学習テーマなので、組み合わせて、DataFrameの内容をtkinterを使って表示するにはどうしたらいいのかな、と、ちょっと作ってみました。
できあがりイメージ
ソースコード
import tkinter as tk import numpy as np from pandas import DataFrame class App(tk.Tk): def __init__(self): super().__init__() self.title("Display DataFrame") self.df = DataFrame(np.arange(20).reshape(4,5)) for r in range(4): for c in range(5): e = tk.Entry(self) e.insert(0,self.df.iloc[r,c]) e.grid(row=r,column=c) e.bind("<KeyPress>",lambda event, row=r, column=c: self.change(event,row,column)) def change(self,event,row,column): value = event.widget.get() self.df.iloc[row,column] = value print(self.df) if __name__ == '__main__': app = App() app.mainloop()
説明
まずは、10行目でDataFrameのインスタンスを作成しています。データは、numpyのarange()を使って、0から20個の要素をつくって、reshape()で4行5列に変更しています。
forループを二重にしてEntryを作成しています。作成するごとに、insert()を使ってデータをセットしています。データの取得は、iloc[r,c]を使います。gridで行と列を指定して配置します。bind()で<KeyPress>イベント、キーが押されたときにchange()メソッドを呼び出すようにバインドしています。
まとめ
表をつくって表示するだけなら、ほんの数行でできてしまいました。Pythonって、すごいですねぇ♪