【簡単Python】デスクトップアプリのメニュー画面(GUI)を作成する簡単な方法|Tkinter



いつもありがとうございます!
「ノンプログラマー向けPython解説シリーズ」へようこそ。
本稿では、Pythonの標準ライブラリであり最も手軽な「tkinter」(ティー・ケー・インター)を使って、デスクトップアプリのメニュー画面(GUI: グラフィカル・ユーザー・インターフェース)を作成する方法を解説いたします。
なんと実質10行ほどの非常にシンプルな方法です。初心者でも簡単に作成することができます。
デスクトップアプリのメニュー画面(GUI)を作成する簡単な方法

全体像
アプリの仕様
例として以下のメニュー画面を作成します。ウィンドウにボタンを1個配置したシンプルな例です。

コード
このメニュー画面を作成するには、以下のようにコードを記述します。
# Tkinterライブラリ(標準ライブラリ)のインポート
import tkinter
# 新しいウィンドウを作成
root = tkinter.Tk()
# ウィンドウのタイトルを設定
root.title('GUIサンプル')
# ウィンドウのサイズを設定
root.geometry('300x200')
# フレームを作成
frame = tkinter.Frame(root, borderwidth=2, relief='groove')
# フレームを配置
frame.pack(fill='both', expand=True, padx=5, pady=5)
# ボタンを作成
btn = tkinter.Button(frame, text='実行', width=10, height=2)
# ボタンを配置
btn.place(relx=0.5, rely=0.5, anchor='center')
# イベントループ開始(ユーザーからの入力を待つ状態)
root.mainloop()

解説していきます!
Tkinter をインポート
# Tkinterライブラリ(標準ライブラリ)のインポート
import tkinter
Tkinter をインポートします。Tkinter は Python に最初から付属している標準ライブラリであり、GUI(グラフィカルユーザーインターフェース)を作成するためのツールキットです。
ウィンドウを作成
# 新しいウィンドウを作成
root = tkinter.Tk()

Tkinter.Tk()
でルートウィンドウを作成し、変数 root
に格納します。ルートウィンドウとは、基盤となるウィンドウのことです。
ウィンドウにタイトルを設定
# ウィンドウのタイトルを設定
root.title('メニュー画面')

root
オブジェクトに対して title
メソッドを使いタイトル名を設定します。ここでは例として「メニュー画面」というタイトルにしています。
ウィンドウのサイズを設定
# ウィンドウのサイズを設定
root.geometry('300x200')
root
オブジェクトに対して geometry
メソッドを使いサイズを設定します。geometry('横方向×縦方向')の順で指定します。単位はピクセルです。
フレームを作成

# フレームを作成
frame = tkinter.Frame(root, borderwidth=2, relief='groove')
tkinter.Frame
でフレームを作成し、変数 frame に格納します。フレームは他のウィジェットをグルーピングするためのコンテナウィジェットです。
()の中は引数です。それぞれ下表のような意味があります。
引数 | 意味 |
---|---|
root | 親ウィジェットの指定です。第一引数は自動的に親ウィジェットを表します。 |
borderwidth=2 | 境界線の幅の指定です。単位はピクセルです。 |
relief='groove' | 境界線のスタイルです。 |
relief のオプションには下表のようなものがあります。
relief のオプション | 意味 |
---|---|
flat | 境界線無し |
groove | フレームの境界が溝状 |
raised | ウィジェットが浮き出して見える |
ridge | フレームの境界が凸状 |
solid | 一定の太さの線 |
sunken | ウィジェットが凹んで見える |

フレームを配置
# フレームを配置
frame.pack(fill='both', expand=True, padx=5, pady=5)
frame
オブジェクトに対して pack
メソッドを使いフレームを配置します。
()の中は引数です。それぞれの引数の意味は下表の通りです。
引数 | 意味 |
---|---|
fill='both' |
このウィジェットが親ウィジェット内でどのように拡大するかを指定します。both を指定すると水平方向と垂直方向の両方に拡大します。 |
expand=True |
expand=True は親ウィジェットが拡大した場合、このウィジェットもそれに合わせて拡大する指定です。 |
padx=5、pady=5 |
ウィジェット周囲に追加する余白(Padding)の設定です。padx=5は左右に5ピクセル、pady=5は上下に5ピクセルの余白を設定します。 |
ボタンを作成
# ボタンを作成
btn = tkinter.Button(frame, text='実行', width=10, height=2)
tkinter.Button
でボタンを作成し、変数 btn
に格納します。()の中は引数です。それぞれの引数の意味は下表の通りです。
引数 | 意味 |
---|---|
frame | 親ウィジェットの指定です。第一引数は自動的に親ウィジェットを表します。 |
text='実行' | ボタンに表示するテキストです。ここでは「実行」というテキストを指定しています。 |
width=10 | ボタンの幅の指定です。width=10 はボタンの幅を10文字分に指定します。 |
height=2 | ボタンの高さの指定です。height=2 はボタンの高さを2文字分に指定します。 |
ボタンを配置
# ボタンを配置
btn.place(relx=0.5, rely=0.5, anchor='center')
btn
オブジェクトに対して place
メソッドを用いボタンを配置します。()の中は引数です。それぞれ下表のような意味があります。
引数 | 意味 |
---|---|
relx=0.5、rely=0.5 | ウィジェットを親ウィンドウの幅と高さの50%の位置に配置する指定です。 |
anchor='center' | ウィジェットの「中心」を、relx と rely で指定した位置に配置する指定です。 |
イベントループを開始
# イベントループ開始(ユーザーからの入力を待つ状態)
root.mainloop()
イベントループを開始します。
イベントとは、ユーザーの操作やシステム内の特定の状態の変化などのことです。例えば、ユーザーがボタンをクリックした時や、ファイルの読み込みが完了した時などがイベントとして扱われます。
プログラムがイベントを待ち、イベントが起こると適切な処理を実行し、次のイベントを待つ、という一連の流れが繰り返されるため、ループと呼ばれます。
root.mainloop()
は Tkinter ウィンドウを表示し、ユーザーがウィンドウ内での操作を行えるようにするためのイベントループを開始します。これは、ウィンドウが閉じられるまで実行し続けます。
まとめ
今回は、ウィンドウに1つのボタンを配置したシンプルなGUIを作成しました。
このままでは、このボタンを押しても何も起こりません。なぜなら、ボタンに対応する動作をまだ実装していないからです。
実際のアプリケーションは、このボタンのクリックを起点に何らかの動作をするように作成します。
これについては、別記事で解説していきたいと思います。

以上で解説は終了です!ご覧いただきありがとうございました!
関連記事
本稿と関連の深い記事です。もしよろしければ、合わせてご活用ください。
Python プログラミングスキルアップのための参考情報
ここでは参考図書を紹介いたしますが、これに限らず自分に合うものを選ぶことが重要だと考えております。皆様の、より一層のご成功を心からお祈りしております。
「独学プログラマー」というPythonを題材にした書籍は大変勉強になりました。Pythonの技術解説だけにとどまらず、プログラミングの魅力や基本的な知識、思考法、仕事の進め方まで幅広く学べます。
こちらの記事でも紹介しております。もしよろしければご覧ください。
また、Pythonに関する書籍は多数出版されています。興味のある方は、チェックしてみてください。
\チェックしてみよう/
\チェックしてみよう/
\チェックしてみよう/

おわりに


ご覧いただきありがとうございました!
今回の記事では、Python の標準ライブラリであり最も手軽な「Tkinter」を使用して、デスクトップアプリのメニュー画面(GUI、グラフィカル・ユーザー・インターフェース)を作成する方法を解説いたしました。
お問い合わせやご要望等ございましたら、「お問い合わせ/ご要望」またはコメントにて、ご連絡いただければ幸いでございます。
皆様の人生がより一層素晴らしいものになるよう、少しでもお役に立てれば幸いでございます。
なお、当サイトでは様々な情報を発信しております。もしよろしければ、トップページもご覧いただけると幸いでございます。
この記事を書いた人
- ■人生を追求する凡人■日本一安全で、気の向くままに自分の時間を過ごせる、こだわりのキャンプ場を作るのが夢■光学・機械系エンジニア(歴20年、内マネジメント10年、特許数件権利化)/副業フリーランスエンジニア■読書・文学愛好■人生は時間そのもの。ひとりでも多くの人が「より良い人生にするために時間を使って欲しい」と願い、仕事のスキルの向上、余暇の充実、資産形成を研究。■VBAアプリ開発サービス提供中(業務委託 / VBA使用経験20年)■Python愛好(歴5年)■VBAエキスパート「Excel VBA スタンダード」(上級者向け資格)/ Python 3 エンジニア認定基礎(経済産業省「ITスキル標準(ITSS)」に掲載)