■csvファイルを読み込み、検索結果をTreeviewに表示する
pandasにてcsvファイル読み込み、
tkinter、Treeviewを使用して、読み込んだデータをTreeviewに表示させる。
表示方法は以下の通り。
入力フォームを作成し、
①入力値あり→入力したデータの項目のみ取得しTreeviewに表示
②入力値なし→全件をTreeviewに表示
※入力値のデータがない場合はメッセージボックスを出力
csvファイル:
SpeciesData.csv
ファイル内容:
Species,Weight(g)
A,2
B,5
A,3
A,3
B,9
A,4
A,4
B,6
B,8
A,4
A,4
A,5
B,6
B,8
B,7
A,5
B,7
A,6
B,7
B,7
・サンプルコード
# -*- Coding:UTF-8 -*-
import tkinter as tk
import tkinter.ttk as ttk
import tkinter.messagebox as msg
import pandas as pd
###########################################
# 処理名 :データ初期化処理
# 処理内容 :Treeviewに出力した値を全て削除
###########################################
def DataInitialization():
tree.delete(*tree.get_children())
###########################################
# 処理名 :データ反映処理
# 処理内容 :
# csvファイルを読み込みTreeviewに反映
# 1.入力値なし:全件検索
# 2.入力値あり:入力値を元に検索
###########################################
def SelectData():
# 入力値を変数に格納
selword = str_seldata.get()
# csvファイルの読み込み
df = pd.read_csv("SpeciesData.csv")
# 入力値が空なら全件検索
if selword == '':
for i in range(len(df)):
tree.insert("", "end", values=(df.iloc[i][0], df.iloc[i][1]))
else:
# 検索処理
df_sel = df[df['Species'] == selword]
# 検索結果数が0件ならばメッセージを出力
if len(df_sel) == 0:
msg.showinfo("検索結果", "データがありません")
# 有件ならばtreeviewに出力
else:
for i in range(len(df_sel)):
tree.insert("", "end", values=(df_sel.iloc[i][0], df_sel.iloc[i][1]))
###########################################
# 処理名 :検索ボタン押下処理
# 処理内容 :
# 1.データを初期化する
# 2.csvファイルを読み込みTreeviewに出力
###########################################
def FncInput():
# データ初期化処理
DataInitialization()
# データ検索処理
SelectData()
###########################################
# Tkinterの画面設定
###########################################
# ウィンドウの設定
base = tk.Tk()
base.title("CSV読込")
canvas = tk.Canvas(base, width=300, height=300, bd=0, highlightthickness=0)
canvas.pack()
#入力値を保持
str_seldata = tk.StringVar()
# 検索用テキストフォーム
txtbox_seldata = tk.Entry(base, width=10, textvariable=str_seldata)
txtbox_seldata.place(x=70, y=20)
# 検索ボタン関係の設定
btn_seldata = tk.Button(base, text="検索", command=FncInput)
btn_seldata.place(x=180, y=25)
# Treeviewの設定
tree = ttk.Treeview(base, columns=(0, 1))
tree["show"] = "headings"
tree.column(0, width=100)
tree.column(1, width=100)
tree.heading(0, text='品種')
tree.heading(1, text='重さ(g)')
tree.place(x=50, y=50)
# ウィンドウの表示
base.mainloop()
・実行結果
初期画面
全件検索(入力値なし)
検索(品種A)
検索(品種B)
検索(品種C:データなし)
コメント