python | tkinterの基本的な使い方をまとめる #2

python | tkinterの基本的な使い方をまとめる #2

今回は前回の続きです。

1)ファイルダイアログの表示

このコードでは、tkinter モジュールと filedialog モジュールをインポートしています。

select_file 関数は、filedialog.askopenfilename() を使用してファイルダイアログを表示し、選択されたファイルのパスを取得します。

必要な処理は、select_file 関数内に追加してください。

import tkinter as tk
from tkinter import filedialog

def select_file():
    file_path = filedialog.askopenfilename()
    entry_var.set(file_path)

root = tk.Tk()
root.geometry("400x300")
root.title("ファイル参照")

Label = tk.Label(root,text = "ファイルを選択してください↓")
Label.pack()

select_button = tk.Button(root, text="ファイルを選択", command=select_file)
select_button.pack()

Label2 = tk.Label(root,text = "選択したファイルのパス↓")
Label2.pack()

entry_var = tk.StringVar()
entry = tk.Entry(root, textvariable=entry_var)
entry.pack()

root.mainloop()

2)表を表示する

この例では、ttk.Treeviewウィジェットを使用して表を作成しています。

tree["columns"]を使用して列を定義し、tree.columnを使用して各列の幅を設定します。

また、tree.headingを使用して列の見出しを設定します。

データを追加するには、tree.insertを使用します。ここでは、3つの行を追加しています。

最後に、tree.pack()を呼び出して表を配置します。

import tkinter as tk
from tkinter import ttk

root = tk.Tk()

# Treeviewウィジェットを作成
tree = ttk.Treeview(root)

# 列を定義
tree["columns"] = ("Name", "Age")

# 列の設定
tree.column("#0", width=100, minwidth=100)
tree.column("Name", width=100, minwidth=100)
tree.column("Age", width=100, minwidth=100)

# 列の見出し
tree.heading("#0", text="ID")
tree.heading("Name", text="Name")
tree.heading("Age", text="Age")

# データの追加
tree.insert("", tk.END, text="1", values=("John Doe", "30"))
tree.insert("", tk.END, text="2", values=("Jane Smith", "25"))
tree.insert("", tk.END, text="3", values=("Bob Johnson", "40"))

# Treeviewウィジェットを配置
tree.pack()

root.mainloop()

3)ファイル(CSV)を読み取り、表に反映する

以下のようなCSVを準備します。

ID,Name,Age
1, John Doe, 30
2, Jane Smith, 25
3, Bob Johnson, 40

これを読み取り、表に反映するには以下のように書きます。

import tkinter as tk
from tkinter import ttk, filedialog
import csv

def load_data():
    file_path = filedialog.askopenfilename(filetypes=[("CSV Files", "*.csv")])
    if file_path:
        with open(file_path, 'r') as file:
            reader = csv.reader(file)
            header = next(reader)
            tree["columns"] = header
            for col in header:
                tree.column(col, width=100, minwidth=100)
                tree.heading(col, text=col)

            for row in reader:
                tree.insert("", tk.END, values=row)

root = tk.Tk()

tree = ttk.Treeview(root)

load_button = tk.Button(root, text="データをロード", command=load_data)
load_button.pack()

tree.pack()

root.mainloop()

今回は以上です。