Python Tkinter入門:入力フォームのデータをCSVファイルに書き出す方法をわかりやすく解説
PythonのGUIツールキット「Tkinter」には、ユーザーからの入力を受け付けるためのさまざまなウィジェットが用意されています。本記事では、Entryウィジェット(1行テキスト入力)を使ってデータを入力し、それをCSVファイルとして保存するアプリケーションの作り方を解説します。
主なウィジェットの役割
- Entryウィジェット … ユーザーから1行のテキスト文字列を受け取るための入力欄です。
- Textウィジェット … 複数行の編集可能なテキストを表示・入力できます。
- Labelウィジェット … ユーザーが編集できない1行以上のテキストを表示します。
アプリケーションの全体構成
まず tkinter と csv モジュールをインポートし、メインウィンドウを作成します。ここではウィンドウタイトルを「Data Entry」としていますが、任意の名前に変更可能です。
次に、ボタンに割り当てる3つの関数を作成します。
- Add関数 … 入力欄の内容をリストに追加し、「データが正常に追加されました」というメッセージボックスを表示します。
- Save関数 … 蓄積したデータをCSVファイルに書き込み、「保存に成功しました」というメッセージボックスを表示します。
- Clear関数 … すべての入力フィールドの内容を消去します。
サンプルコード
# 必要なライブラリをインポート
from csv import *
from tkinter import *
from tkinter import messagebox
window = Tk()
window.title("Data Entry")
window.geometry("700x350")
main_lst = []
def Add():
lst = [name.get(), age.get(), contact.get()]
main_lst.append(lst)
messagebox.showinfo("Information", "The data has been added successfully")
def Save():
with open("data_entry.csv", "w") as file:
Writer = writer(file)
Writer.writerow(["Name", "Age", "Contact"])
Writer.writerows(main_lst)
messagebox.showinfo("Information", "Saved succesfully")
def Clear():
name.delete(0, END)
age.delete(0, END)
contact.delete(0, END)
# ラベル3つ、ボタン4つ、入力フィールド3つを作成
label1 = Label(window, text="Name: ", padx=20, pady=10)
label2 = Label(window, text="Age: ", padx=20, pady=10)
label3 = Label(window, text="Contact: ", padx=20, pady=10)
name = Entry(window, width=30, borderwidth=3)
age = Entry(window, width=30, borderwidth=3)
contact = Entry(window, width=30, borderwidth=3)
save = Button(window, text="Save", padx=20, pady=10, command=Save)
add = Button(window, text="Add", padx=20, pady=10, command=Add)
clear = Button(window, text="Clear", padx=18, pady=10, command=Clear)
Exit = Button(window, text="Exit", padx=20, pady=10, command=window.quit)
# gridレイアウトで配置
label1.grid(row=0, column=0)
label2.grid(row=1, column=0)
label3.grid(row=2, column=0)
name.grid(row=0, column=1)
age.grid(row=1, column=1)
contact.grid(row=2, column=1)
save.grid(row=4, column=0, columnspan=2)
add.grid(row=3, column=0, columnspan=2)
clear.grid(row=5, column=0, columnspan=2)
Exit.grid(row=6, column=0, columnspan=2)
window.mainloop()
print(lst)
print(main_lst)実行結果
上記のコードを実行すると、次のような入力画面が表示されます。

各Entryフィールドに名前・年齢・連絡先を入力し、「Add」ボタンでデータを一時リストに追加します。その後、「Save」ボタンをクリックすると、データが data_entry.csv ファイルに書き込まれます。「Clear」ボタンを押せば、すべての入力欄をまとめて空にできます。

保存されたCSVファイルを開くと、以下のようにデータが記録されていることが確認できます。
Name, Age, Contact Arjun, 25, 8790654321 John, 20, 9876543210
ポイントまとめ
Entryの.get()メソッドで入力値を取得し、リストに格納します。csv.writerを使うことで、ヘッダー行とデータ行を簡単に書き出せます。messagebox.showinfo()を利用すると、操作の成功をユーザーに通知できます。grid()を使えば、ラベル・入力欄・ボタンを整然とレイアウトできます。
この仕組みを応用すれば、顧客管理やアンケート収集など、実用的なデータ登録ツールをPythonだけで手軽に構築できます。
-
Tkinterでウィンドウからウィジェットを削除する方法
アプリケーション開発をしていると、不要になったウィジェットを画面から取り除きたい場面があります。Tkinterでは、destroy()メソッドを使うことで、ウィンドウやフレームからウィジェットを簡単に削除できます。削除用の関数を定義し、それをウィジェットに紐づけて呼び出すのが基本的な使い方です。実装例以下の例では、ボタンをクリックすると、ウィンドウ上のテキストラベルウィジェットが削除されるプログラムを作成しています。#Import the tkinter library from tkinter import * #Create an instance of tkinter frame wi
-
Python Tkinterでルートウィンドウを非表示・破棄する2つの方法
Tkinterアプリケーションのテスト中に、デフォルトのウィンドウやフレームを一時的に隠したい、あるいは完全に閉じたいという場面に遭遇することがあります。Tkinterでは、withdraw()メソッドによる「非表示」と、destroy()メソッドによる「破棄」の2つのアプローチが用意されています。mainloop()とウィンドウのライフサイクルmainloop()は、外部イベントによってウィンドウが閉じられるまで、Tkinterアプリケーションを実行し続ける役割を担います。このメインループが動作している間、ウィンドウは画面上に表示され続けます。ウィンドウを完全に破棄(終了)したい場合は、de