残プロ 第-14回 ~pythonでcsvをgui表示~


今回すること

  • csvを読込,gui表示
  • pyhtonに標準で入っているtkinterモジュールを利用
  • 表の作成にはttk.treeviewを使用する

.py

tkinterの流れとしては,

  • ガワ(ウィンドウやフレーム)をつくる
  • 中身(ラベルやボタン)をつくる
  • 配置

となります.もちろん配置した後から中身をつくることもできます
ガワと中身は作っておいて配置せず,任意のタイミング(ボタン押下等)で表示するといったことができます.今回はやってませんが...

以下,サンプルプログラムになります.

import tkinter as tk
import tkinter.ttk as ttk
import pandas as pd

def selected(event):
    for item in tree.selection():
        print(item, tree.item(item))


def main():
    # Load .csv
    df = pd.read_csv("tasks.csv", encoding='shift-jis')
    # create Window and Treeview
    root = tk.Tk()
    tree = ttk.Treeview(root, show='headings')
    # set Treeview columns
    tree['column'] = ("No",) + tuple(df)
    # set header
    tree.heading("No", text="No")
    for c in df:
        tree.heading(c, text=c)
    # set cells on the row
    for i, row in enumerate(df.itertuples()):
        tree.insert("", "end", tags=i, values=row)
    # set layout
    tree.pack()
    # bind action
    tree.bind('<<TreeviewSelect>>', selected)
    # set loop
    root.mainloop()


if __name__ == '__main__':
    main()

実行結果

各行にselected関数をbindメソッドによって紐づけています.内容はクリックされた行のitemを表示するものです.今回の例ではvaluesに要素の配列が格納されていることが分かりますね!
選択された行のvaluesを操作すればgui上で表示の変更が,tagsを利用すれば.csvの編集ができそうです.

terminal
I006 {'text': '', 'image': '', 'values': [5, 'ペットボトル,缶', '2021年06月22日', '8:00:00', 'SecondTuesday,FourthTuesday', 'nan'], 'open': 0, 'tags': [5]}