PythonでGUI作成 tkinterで入力フォーム作成する方法

  • URLをコピーしました!

今回はtkinterでGUIを作成するシリーズ第2回目として、ウィジェットを使って入力フォームを作成する方法を解説していきたいと思います。
Pythonでデスクトップアプリケーションを作成したい方におすすめの内容ですので、ぜひ参考にしてみてください。

目次

tkinterとは

TkinterはGUI(グラフィカルユーザーインタフェース)を実装するためのPythonの標準ライブラリです。ボタンやテキストボックス、画像表示などユーザーがキーボードやマウスで操作可能なインタフェースを構築することができます。

公式ドキュメントは以下から参照できます。

また、前回の記事でフォームの作成方法を解説していますので、あわせてご覧ください。

作成するフォーム

今回は以下のような簡単な入力フォームを作成します。
ユーザーがデータを入力し、OKボタンをクリックするとその内容がコンソールに出力されます。

作成するフォーム

使用するウィジェット

tkinterではフォーム上に表示するオブジェクトのことをウィジェットと呼びます。今回は以下の4種類のウィジェットを使ってフォームを作成しました。

ラベル

ラベルはテキストを表示するためのウィジェットです。今回の入力フォームのメニュー項目の表示に使用しています。

label1 = ttk.Label(frame1, text='お名前', padding=(5, 2))

テキストボックス

テキストボックスはユーザーが自由に文字列を入力できるエリアです。今回は名前、住所を入力するフォームとして使用しています。

name_txt = ttk.Entry(
    frame1,
    textvariable=name,
    width=20)

コンボボックス

コンボボックスはリストの中からユーザーが項目を選択できるウィジェットです。今回は職業を選択するためのフォームとして使用しています。
あらかじめ選択項目として表示するための文字列のリストを作成しておく必要があります。

#Comboboxの選択項目用リスト
cb_job = ['会社員', '会社役員', '学生', 'アルバイト', '自宅警備', 'その他']

job_cb = ttk.Combobox(
    frame1, 
    textvariable=job, 
    values=cb_job, 
    width=20)
job_cb.set(cb_job[0])
job_cb.bind(
    '<<ComboboxSelected>>')

ボタン

ボタンはユーザーがクリックした際に、あらかじめ登録されたイベント処理を実行できるウィジェットです。今回は登録完了後に内容をコンソールに出力されるボタンを作成しました。

button1 = ttk.Button(
    frame1, text='OK', 
    command=lambda: print("%s, %s, %s" % (name.get(), address.get(), job.get())))

ウィジェットを配置する

tkinterでGUIを作成する場合、ウィンドウ>フレーム>ウィジェット(ラベルやテキストボックスなどのオブジェクト)という構造で作成していきます。
今回はフレーム内部のウィジェットの配置場所をgridを使って指定しています。以下のようにグリッドを作成します。

frame1 = ttk.Frame(root, padding=(32))
frame1.grid()

gridを使用するとウィジェットの場所をrowとcolumnで指定して任意の場所に配置することができます。
今回の例のフォームの場合は以下のようになります。

例として職業を選択するコンボボックスの場合を見てみます。以下のようにウィジェット生成時に引数のgridでrow→2、column→1といった感じで指定します。

job_cb = ttk.Combobox(
    frame1, 
    textvariable=job, 
    values=cb_job, 
    width=20)
job_cb.set(cb_job[0])
job_cb.bind(
    '<<ComboboxSelected>>')
job_cb.grid(row=2, column=1)

作成したソースコード

作成した全体のソースコードは以下の通りです。

from tkinter import *
from tkinter import ttk

#Comboboxの選択項目用リスト
cb_job = ['会社員', '会社役員', '学生', 'アルバイト', '自宅警備', 'その他']

#ウィンドウを作成
root = Tk()

#ウィンドウサイズを指定
root.geometry("320x240")

#ウィンドウタイトルを指定
root.title('入力フォーム')

frame1 = ttk.Frame(root, padding=(32))
frame1.grid()

#名前
label1 = ttk.Label(frame1, text='お名前', padding=(5, 2))
label1.grid(row=0, column=0, sticky=E)

#住所
label2 = ttk.Label(frame1, text='住所', padding=(5, 2))
label2.grid(row=1, column=0, sticky=E)

#職業
label3 = ttk.Label(frame1, text='職業', padding=(5, 2))
label3.grid(row=2, column=0, sticky=E)


#名前
name = StringVar()
name_txt = ttk.Entry(
    frame1,
    textvariable=name,
    width=20)
name_txt.grid(row=0, column=1)

#住所
address = StringVar()
address_txt = ttk.Entry(
    frame1,
    textvariable=address,
    width=20)
address_txt.grid(row=1, column=1)

#職業
# Combobox
job = StringVar()
job_cb = ttk.Combobox(
    frame1, 
    textvariable=job, 
    values=cb_job, 
    width=20)
job_cb.set(cb_job[0])
job_cb.bind(
    '<<ComboboxSelected>>')
job_cb.grid(row=2, column=1)

# Button
button1 = ttk.Button(
    frame1, text='OK', 
    command=lambda: print("%s, %s, %s" % (name.get(), address.get(), job.get())))
button1.grid(row=3, column=1)

#ウィンドウ表示継続
root.mainloop()

実行結果

プログラムを実行すると以下のようにフォームが表示されました。gridの位置指定も正しくできていることが確認できます。

以下のように内容を入力して「OK」ボタンをクリックするとイベント処理が実行されます。

以下のように入力した内容が正しくコンソールに出力されました。

むらさん, 愛知県, 自宅警備

その他のウィジェットの使用方法

canvas

フォーム上に図を書きたい場合や画像を表示したい場合は、tkinterではcanvasウィジェットを使って実装することができます。canvasウィジェットの詳しい使い方は以下の記事で解説しています。

scrolledtext

フォーム上で複数行のテキストを入力したい場合はscrolledtestウィジェットを使って実装することができます。scrolledtestでは入力しているテキストの行数がテキストボックスの表示エリアを超えると自動的にスクロールバーが表示されますので、長文の入力が可能になります。
scrolledtextウィジェットの詳しい使い方は以下の記事で解説しています。

まとめ

今回はtkinterのウィジェットを使用して入力フォームを作成する方法を解説しました。tkinterには他にも色々なウィジェットがありますので、また別の記事で紹介したいと思います。

また、Tkinterを使ったGUI作成について動画で学びたい方は以下の講座もおすすめです。

0から始めるTkinterの使い方完全マスター講座〜Python×GUIの基礎・応用〜 icon



それでは、また次の記事でお会いしましょう。

参考

よかったらシェアしてね!
  • URLをコピーしました!
目次