今回は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ウィジェットの詳しい使い方は以下の記事で解説しています。
Radiobutton
複数の選択項目から、ユーザーに特定の項目を選択させるためのUIを実装できるRadiobuttonウィジェットを以下の記事で解説しています。
プログラミングのスキルを活かすには
プログラミングのスキルを仕事に活かすには、フリーランスとして受けられる案件がおすすめです。
テックゲートフリーランスは、フリーランスエンジニアの案件紹介や契約交渉・債権管理などのサポートを行っているフリーランスエージェントです。
- リモートワーク可能な案件が50%以上
- 週3〜4日の案件の豊富さ
- 年収100万円アップのサポート
無料相談フォームからご登録いただくだけで、経験年数やスキルに合わせて案件をご紹介。また、リモートワーク可能な案件や週3〜4日OKの案件も豊富に用意されています。
副業やフリーランスとして仕事を受けてみたいと考えている方には、テックゲートフリーランスが提供する多様なサポートが非常におすすめです。
\ 無料で登録してみる! /
まとめ
今回はtkinterのウィジェットを使用して入力フォームを作成する方法を解説しました。tkinterには他にも色々なウィジェットがありますので、また別の記事で紹介したいと思います。
Tkinterを使ったGUI作成についてさらに詳しく学びたい方には、自分のペースで動画で学べるUdemyの以下の講座もおすすめです。
0から始めるTkinterの使い方完全マスター講座〜Python×GUIの基礎・応用〜また、以下の記事で効率的にPythonのプログラミングスキルを学べるプログラミングスクールの選び方について解説しています。最近ではほとんどのスクールがオンラインで授業を受けられるようになり、仕事をしながらでも自宅で自分のペースで学習できるようになりました。
スキルアップや副業にぜひ活用してみてください。
スクールではなく、自分でPythonを習得したい方には、いつでもどこでも学べる動画学習プラットフォームのUdemyがおすすめです。
講座単位で購入できるため、スクールに比べ非常に安価(セール時1200円程度~)に学ぶことができます。私も受講しているおすすめの講座を以下の記事でまとめていますので、ぜひ参考にしてみてください。
それでは、また次の記事でお会いしましょう。
コメント