Pythonはデータ分析やAI開発のイメージが強い言語ですが、デスクトップ上で動作する「ウィンドウ(GUIアプリ)」も手軽に作成することができます。
しかし、いざ画面を作ろうとすると「どのライブラリを使えばいいのかわからない」「TkinterやPySimpleGUIなど種類が多くて迷う」といった壁にぶつかることも少なくありません。
この記事では、Pythonでウィンドウを作成するための代表的なライブラリの比較から、標準ライブラリである「Tkinter」を使った具体的な実装手順、さらに「PythonはGUIに向いていない」と言われる理由まで、最新情報を踏まえて徹底解説します。
![]() 執筆者:マヒロ |
|
Pythonでウィンドウ(GUI)を作成する代表的なライブラリ
Pythonには、GUI(Graphical User Interface)を作成するためのライブラリが数多く存在します。
作りたいアプリケーションの規模やデザイン、配布のしやすさに応じて適切なツールを選ぶことが重要です。
ここでは、GUI作成のための主要なライブラリを紹介します。
Tkinter(標準ライブラリ)
Tkinter(ティーキンター)は、Pythonをインストールすると標準で付いてくるGUIライブラリです。
WindowsやMacならば別途インストール作業が不要で、環境構築の手間がないため、学習用や小規模なツール作成において最も選ばれています。
デザインはクラシックですが、情報量が多く、困ったときに解決策を見つけやすいのが最大の特徴です。
PySimpleGUI
PySimpleGUIは、「Tkinterなどの既存フレームワークをより簡単に書けるようにする」ことを目的としたラッパーライブラリです。
Tkinterでは数十行書く必要がある処理を、数行のコードで実現できるため、初心者からの人気が非常に高いです。
ただし、近年ライセンス形態が変更され、商用利用や一部の利用条件において登録が必要になるケースがあるため、導入前には公式サイトで最新の利用規約を確認することをおすすめします。
その他(PyQt, Kivy, Fletなど)
より高度な機能やモダンなデザインを求める場合は、以下のようなライブラリも候補に挙がります。
- PyQt (PySide):非常に高機能で、商用アプリケーションのようなリッチなUIが作れますが、習得難易度は高めです。
- Kivy:スマートフォンアプリ(Android/iOS)の開発にも対応していますが、独特な記法を覚える必要があります。
- Flet:近年注目されているライブラリで、Flutter(Google製フレームワーク)のUIをPythonだけで構築できます。Webアプリのようなモダンな見た目を簡単に作れます。
PythonはGUI作成に向いていない?その理由と対策
検索キーワードで「Python GUI 向いていない」と出てくることがありますが、これは主に「実行速度」と「配布の難しさ」に起因します。
C#やJavaなどに比べると、Python製アプリは起動が若干遅かったり、exe化(実行ファイル化)した際にファイルサイズが大きくなったりする傾向があります。
しかし、社内ツールや個人利用の自動化アプリであれば、開発スピードの速さというメリットがデメリットを大きく上回ります。
大規模な市販ソフトを作るのでなければ、PythonでのGUI作成は非常に有効な選択肢です。
【Tkinter入門】基本のウィンドウと文字表示を作成する
まずは、Python標準のTkinterを使って、最も基本的なウィンドウを表示してみましょう。
特別な準備は必要ありません。
Pythonが動く環境であればすぐに試すことができます。
最小構成のウィンドウ作成コード
以下のコードは、空のウィンドウを表示するだけの最もシンプルなプログラムです。
import tkinter as tk
# メインウィンドウの作成
root = tk.Tk()
# ウィンドウのタイトル設定
root.title("初めてのウィンドウ")
# ウィンドウのサイズ設定(幅x高さ)
root.geometry("400x300")
# メインループ(ウィンドウを表示し続けるための処理)
root.mainloop()
実行結果
「初めてのウィンドウ」というタイトルがついた、横400ピクセル、縦300ピクセルの空のウィンドウが画面に表示されます。
ソースコードの解説
import tkinter as tk でライブラリを読み込み、tk.Tk() でウィンドウの土台(オブジェクト)を作成します。
重要なのは最後の root.mainloop() です。
GUIアプリは、ユーザーからの操作を待ち受けるために常に起動し続ける必要があります。
この行がないと、ウィンドウは一瞬で閉じてしまいます。
ラベルを使って文字を表示する方法
次に、ウィンドウの中にテキストを表示してみましょう。
Tkinterでは「Label」というウィジェットを使います。
import tkinter as tk
root = tk.Tk()
root.title("文字の表示")
root.geometry("400x300")
# ラベルの作成
# text: 表示する文字, font: フォントの種類とサイズ
label = tk.Label(root, text="こんにちは、Python!", font=("Arial", 20))
# ラベルの配置(packは上から順に配置する方式)
label.pack(pady=20)
root.mainloop()
ソースコードの解説
tk.Label() でラベル部品を作成し、text 引数に表示したい文字列を指定します。
作成しただけでは画面に表示されないため、pack() メソッドを使ってウィンドウ内に配置します。
pady=20 は、上下に20ピクセルの余白を空ける指定です。
【Tkinter実践】ボタン配置とイベント処理のサンプル
文字を表示するだけでなく、ユーザーが操作できる「ボタン」や「入力フォーム」を追加し、クリックされたら処理が動くようなアプリを作ってみましょう。
ボタンと入力フォーム(エントリー)の配置
ここでは、名前を入力してボタンを押すと、挨拶のメッセージが変わる簡単なアプリを作成します。
import tkinter as tk
def on_button_click():
# 入力されたテキストを取得
input_text = entry.get()
# ラベルの文字を更新
result_label.config(text=f"ようこそ、{input_text}さん!")
root = tk.Tk()
root.title("挨拶アプリ")
root.geometry("400x300")
# 入力フォーム(Entry)の作成
entry = tk.Entry(root, width=30)
entry.pack(pady=10)
# ボタン(Button)の作成
# command引数に関数名を指定することで、クリック時の動作を紐付ける
button = tk.Button(root, text="挨拶する", command=on_button_click)
button.pack(pady=10)
# 結果表示用のラベル
result_label = tk.Label(root, text="名前を入力してください", font=("Helvetica", 14))
result_label.pack(pady=20)
root.mainloop()
実行結果
ウィンドウに入力欄と「挨拶する」ボタンが表示されます。
名前を入力してボタンを押すと、下の文字が「ようこそ、〇〇さん!」に切り替わります。
ソースコードの解説
tk.Entry:1行のテキスト入力欄を作成します。tk.Button:ボタンを作成します。重要なのはcommand=on_button_clickの部分です。ここに実行したい関数名(()は付けない)を指定することで、クリック時にその関数が呼び出されます。- イベント処理関数:
on_button_click関数の中で、entry.get()を使って入力値を取得し、result_label.config()を使ってラベルの内容を書き換えています。
初心者におすすめ!PySimpleGUIでの画面作成
Tkinterは標準で便利ですが、コードが少し長くなりがちです。
より直感的に書きたい場合は、PySimpleGUI(またはその後継や類似ライブラリ)を使うと、リスト形式でレイアウトを定義できます。
PySimpleGUIを使ったサンプルコード
※PySimpleGUIを利用するには、別途インストール(pip install PySimpleGUI)が必要です。
また、最新バージョンではライセンス登録が必要な場合があります。
import PySimpleGUI as sg
# 画面レイアウトの定義(リストのリストで作る)
layout = [
[sg.Text("名前を入力してください")],
[sg.InputText(key="-NAME-")],
[sg.Button("OK"), sg.Button("キャンセル")],
[sg.Text("", key="-OUTPUT-")]
]
# ウィンドウの作成
window = sg.Window("PySimpleGUIサンプル", layout)
# イベントループ
while True:
event, values = window.read()
# 閉じるボタンかキャンセルが押されたら終了
if event == sg.WIN_CLOSED or event == "キャンセル":
break
# OKボタンが押されたら表示を更新
if event == "OK":
name = values["-NAME-"]
window["-OUTPUT-"].update(f"こんにちは、{name}さん!")
window.close()
ソースコードの解説
PySimpleGUIでは、layout 変数に「1行ごとの部品」をリストとして記述します。
これだけで画面構成が決まるため、Tkinterの pack や grid に悩まされることがありません。 window.read() でイベントと入力値を受け取り、if文で処理を分岐させるというシンプルな構造で記述できます。
Pythonのスキルを活かして年収を上げる方法
以上、Pythonでウィンドウを作成する方法について解説してきました。
なお、Pythonのスキルがある場合には、「転職して年収をアップさせる」「副業で稼ぐ」といった方法を検討するのがおすすめです。
Pythonエンジニアの需要は非常に高いため、転職によって数十万円の年収アップはザラで、100万円以上年収が上がることも珍しくありません。
なお、転職によって年収を上げたい場合は、エンジニア専門の転職エージェントサービスを利用するのが最適です。
併せて、副業案件を獲得できるエージェントにも登録しておくと、空いている時間を活かして稼げるようなPythonの案件を探しやすくなります。
転職エージェントも副業エージェントも、登録・利用は完全無料なので、どんな求人や副業案件があるのか気になる方は、気軽に利用してみるとよいでしょう。



