PySide6入門|PythonでGUIアプリを簡単に作る方法と実例付き解説

プログラミング
記事内に広告が含まれています。
スポンサーリンク

PySide6のインストールと開発環境の準備

Pythonでデスクトップアプリを作るための第一歩は、開発環境を整えることから始まります。ここでは、PySide6を使ってGUIアプリ開発を始めるために必要なツールやインストール手順を、初心者にもわかりやすく説明していきます。

brian
brian

Pythonでデスクトップアプリを作ってみたい方へ!​PySide6を使えば、ボタンやウィンドウなどのGUIを簡単に作成できます。​このガイドでは、インストール方法から基本的な使い方、シンプルなアプリの作成手順まで、初心者にもわかりやすく解説しています。​GUI開発に興味がある方は、ぜひチェックしてみてください!

PySide6とは?

PySide6は、Pythonでデスクトップアプリを作るためのGUIツールキットです。中身は、QtというC++製の非常に強力なGUIライブラリをPythonから使えるようにしたものです。

「PyQtとどう違うの?」と思う方も多いかもしれませんが、PySide6はQt公式が提供しているバインディングです。一方でPyQtは別の団体によって開発されています。どちらも機能的には似ていますが、PySide6は商用ライセンスの面でも使いやすく、近年ではこちらを使う人が増えてきています。

開発に必要なツール

PySide6を使うには、以下のツールが必要です。

  • Python(3.7以上が推奨)
  • pip(Pythonのパッケージ管理ツール)
  • テキストエディタまたはIDE(VS Code、PyCharmなど)

特にVS Code(Visual Studio Code)は、無料で使える上に拡張機能が豊富なのでおすすめです。

Pythonのインストール

もしまだPythonがインストールされていない場合は、公式サイトから最新版をインストールしてください。

インストール時には、「Add Python to PATH」にチェックを入れるのをお忘れなく。これで、ターミナル(コマンドプロンプト)からpythonと打つだけで実行できるようになります。

PySide6のインストール

準備が整ったら、いよいよPySide6をインストールします。pipを使って簡単にインストールできます。

Bash
pip install pyside6

これで、PySide6が使えるようになります。うまくインストールされたか確認するには、以下のコマンドでバージョンをチェックしてみましょう。

Bash
python -c "import PySide6; print(PySide6.__version__)"

バージョンが表示されれば成功です!

ここまでできれば、PySide6を使った開発の準備は完了です。あとはコードを書くだけ!まずはシンプルなウィンドウを表示するところから始めてみましょう。

スポンサーリンク

最初のGUIアプリを作ってみよう

環境の準備ができたら、さっそくPySide6を使って、最も基本的な「ウィンドウを表示するだけのアプリ」を作ってみましょう。
これができれば、GUIアプリ開発の第一歩は完了です!

必要な最小限のコード

まずは、以下のコードをテキストエディタで作成し、main.pyなどの名前で保存してください。

Python
import sys
from PySide6.QtWidgets import QApplication, QMainWindow

# メインウィンドウのクラス
class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("はじめてのPySide6アプリ")
        self.resize(400, 300)

# アプリケーションを実行する処理
if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec())

コードの解説

QApplicationQMainWindowの役割

  • QApplication:アプリケーション全体を管理するクラスです。PySide6でGUIアプリを動かすには必ず必要になります。
  • QMainWindow:いわゆる「アプリのウィンドウ本体」です。メニューやツールバー、ステータスバーなどの基本機能を持っています。

クラス定義で拡張する理由

GUIアプリでは、画面の構成や動作を定義するためにクラスを使います。このサンプルではMainWindowという名前で、QMainWindowを継承したカスタムクラスを定義しています。

show()exec()の意味

  • window.show():ウィンドウを画面に表示します。
  • app.exec():イベントループを開始します。これがないと、アプリはすぐに終了してしまいます。

実行してみよう

仮想環境を有効にした状態で、以下のコマンドを実行してみてください。

Bash
python main.py

すると、「はじめてのPySide6アプリ」というタイトルのウィンドウが表示されるはずです。

💡ヒント

もしウィンドウが表示されない場合は、エラーメッセージをよく確認して、モジュールのインポートやスペルミスがないか見直してみてください。

ここまでのまとめ

  • QApplicationQMainWindowがPySide6の基本構成
  • クラスを使ってウィンドウをカスタマイズ
  • show()で表示、exec()で動作を開始

このシンプルなアプリから、少しずつUIを追加していくことで、実用的なツールに成長させることができます。

スポンサーリンク

基本的なウィジェットの使い方

PySide6では、ボタンやラベル、テキスト入力欄など、さまざまなウィジェット(部品)を使ってGUIを構築します。この章では、よく使われる基本ウィジェットの使い方を、実際のコード例とともに紹介します。

ウィジェットとは?

ウィジェット(Widget)とは、GUIアプリにおける部品のことです。ボタン、ラベル、入力フォーム、チェックボックスなど、ユーザーが直接触れるUIのことを指します。

レイアウトの基礎

ウィジェットを配置するには「レイアウト」が必要です。レイアウトは、複数のウィジェットを整理整頓して画面に配置する仕組みです。

よく使われるのが以下の2つ:

  • QVBoxLayout:縦に並べるレイアウト
  • QHBoxLayout:横に並べるレイアウト

これを踏まえて、サンプルアプリを作ってみましょう。

複数のウィジェットを配置してみる

以下のコードでは、ボタン・ラベル・テキスト入力欄を配置し、基本的なGUIを作成します。

Python
import sys
from PySide6.QtWidgets import (
    QApplication, QWidget, QPushButton,
    QLabel, QLineEdit, QVBoxLayout
)

class MainWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("ウィジェットの基本")

        # 各ウィジェットの作成
        self.label = QLabel("名前を入力してください:")
        self.textbox = QLineEdit()
        self.button = QPushButton("送信")

        # レイアウトにウィジェットを追加
        layout = QVBoxLayout()
        layout.addWidget(self.label)
        layout.addWidget(self.textbox)
        layout.addWidget(self.button)

        # レイアウトをウィンドウに設定
        self.setLayout(layout)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec())

各ウィジェットの役割

QLabel(ラベル)

  • 画面にテキストを表示するためのウィジェット。
  • 説明文や見出しなどによく使われます。

QLineEdit(テキストボックス)

  • ユーザーが文字を入力できるフォーム。
  • パスワードや検索ワードの入力にも使用されます。

QPushButton(ボタン)

  • クリックすることで何かの処理を実行する部品。
  • 最も基本的な「操作」の起点となるウィジェットです。

QVBoxLayout(縦並びレイアウト)

  • ウィジェットを上から下に並べて配置します。
  • addWidget()で順番に追加していきます。

実行してみよう

このコードをwidgets.pyなどのファイル名で保存し、以下のコマンドで実行してください。

Python
python widgets.py

ウィンドウが表示され、ラベル、テキストボックス、ボタンが縦に並んでいるのが確認できます。

ここまでのまとめ
  • ウィジェットはUIを構成する基本部品
  • QLabelQLineEditQPushButtonを使うことで、基本的な入力画面が作れる
  • レイアウト(QVBoxLayout)を使って綺麗に配置

これで、画面構成の基礎が身につきました。次は、ウィジェットに動きを加えるために、イベント処理を学びます。

スポンサーリンク

イベント処理とシグナル・スロット

GUIアプリで重要なのが「イベント処理」です。ボタンをクリックしたときに何かが起こる、入力欄に文字を入力したときに反応する――これらはすべて「イベント」と呼ばれます。PySide6では、シグナル(Signal)とスロット(Slot)という仕組みを使って、イベント処理をシンプルかつ強力に実装できます。

シグナルとスロットとは?

PySide6では、以下のような考え方でイベント処理が構成されています。

  • シグナル(Signal):何かが「起こった」という合図(例:ボタンがクリックされた)
  • スロット(Slot):それに対応する「処理」(例:メッセージを表示する)

シグナルとスロットを「接続」することで、ユーザーの操作に対して反応を起こせるようになります。

クリックイベントを処理してみる

以下のコードでは、ボタンがクリックされたときに、テキストボックスの内容をラベルに表示するアプリを作成しています。

Python
import sys
from PySide6.QtWidgets import (
    QApplication, QWidget, QLabel, QLineEdit,
    QPushButton, QVBoxLayout
)

class MainWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("イベント処理の基本")

        self.label = QLabel("ここに名前が表示されます")
        self.textbox = QLineEdit()
        self.button = QPushButton("表示")

        # シグナルとスロットの接続
        self.button.clicked.connect(self.show_name)

        layout = QVBoxLayout()
        layout.addWidget(self.textbox)
        layout.addWidget(self.button)
        layout.addWidget(self.label)

        self.setLayout(layout)

    # スロット:ボタンがクリックされたときに呼ばれる関数
    def show_name(self):
        name = self.textbox.text()
        self.label.setText(f"こんにちは、{name}さん!")

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec())

ポイント解説

clicked.connect(self.show_name)

この1行が、シグナルとスロットの接続です。

  • clicked:ボタンがクリックされたときに発行されるシグナル
  • connect(...):どの関数(スロット)を呼び出すかを指定

つまりこのコードは、「ボタンがクリックされたら、show_name()という関数を実行してね」と伝えていることになります。

self.textbox.text()self.label.setText(...)

  • .text():テキストボックスの中に入力された文字列を取得
  • .setText(...):ラベルの表示内容を変更

このように、ウィジェットの中身を動的に操作することができます。

他にもある便利なシグナル

PySide6には、たくさんのシグナルが用意されています。たとえば:

ウィジェットシグナル例説明
QPushButtonclickedクリックされたとき
QLineEdittextChangedテキストが変更されたとき
QLineEditreturnPressedEnterキーが押されたとき
QCheckBoxstateChangedチェック状態が変わったとき

どのシグナルが使えるかは、公式ドキュメントや補完機能を使うと便利です。

同様に実行し、表示ボタンをクリックすることでテキストボックスの内容がラベルに表示されるのが確認できます。

ここまでのまとめ
  • イベント処理はGUIアプリの要
  • シグナルとスロットを接続して処理を実行
  • 実際の操作に対して、柔軟に反応するコードが書ける

この仕組みを理解すれば、よりインタラクティブなアプリを作る準備が整ったと言えるでしょう!

スポンサーリンク

実用的なミニアプリを作ってみる

ここまで学んだ知識を活かして、ちょっとした実用的なGUIアプリを作ってみましょう。今回のサンプルは、簡易的なToDoリストアプリです。タスクを入力して「追加」ボタンを押すと、リストに表示されるというシンプルなものですが、ウィジェットの組み合わせ方イベント処理の流れを実践的に学ぶのにぴったりです。

完成イメージ

  • ユーザーが入力フォームにタスクを記入
  • 「追加」ボタンをクリック
  • 下のリストにタスクが表示される
  • UIはシンプルだけど、ちゃんと動く!

使用する主なウィジェット

ウィジェット役割
QLineEditタスクを入力するテキストボックス
QPushButtonタスクを追加するためのボタン
QListWidget登録されたタスクを表示するリスト

コード例:ToDoリストアプリ

Python
import sys
from PySide6.QtWidgets import (
    QApplication, QWidget, QVBoxLayout,
    QHBoxLayout, QLineEdit, QPushButton,
    QListWidget, QMessageBox
)

class ToDoApp(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("シンプルToDoリスト")
        self.resize(400, 300)

        # ウィジェットの作成
        self.task_input = QLineEdit()
        self.task_input.setPlaceholderText("タスクを入力してください")
        self.add_button = QPushButton("追加")
        self.task_list = QListWidget()

        # ボタンにイベントを接続
        self.add_button.clicked.connect(self.add_task)

        # レイアウト構成
        input_layout = QHBoxLayout()
        input_layout.addWidget(self.task_input)
        input_layout.addWidget(self.add_button)

        main_layout = QVBoxLayout()
        main_layout.addLayout(input_layout)
        main_layout.addWidget(self.task_list)

        self.setLayout(main_layout)

    def add_task(self):
        task = self.task_input.text().strip()
        if task:
            self.task_list.addItem(task)
            self.task_input.clear()
        else:
            QMessageBox.warning(self, "入力エラー", "タスクが空です。何か入力してください。")

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = ToDoApp()
    window.show()
    sys.exit(app.exec())

コードのポイント解説

QListWidgetでタスクを表示

  • addItem()を使えば、簡単にリストに項目を追加できます。
  • 自動的にスクロールバーも付き、便利な部品です。

QMessageBox.warningでエラーメッセージ

  • 入力が空だったときに、警告メッセージを表示。
  • ユーザーフレンドリーな対応ができるようになります。

レイアウトの組み合わせ

  • QHBoxLayoutで入力欄とボタンを横に並べ
  • QVBoxLayoutでそれらとリストを縦に並べる

このようにレイアウトをネスト(入れ子)にすることで、柔軟なUIが構築できます。

実行方法

このコードをtodo_app.pyなどの名前で保存し、以下のコマンドで起動します。

Bash
python todo_app.py

以下のような簡単なTodoリストが表示されることが確認できます。

応用のヒント

  • 削除ボタンを追加して、選択したタスクを削除できるようにする
  • タスクの保存機能(ファイルへの保存・読み込み)を追加
  • 締め切り日を設定するなど、タスク管理機能を拡張
ここまでのまとめ
  • 今までの知識で実用的なアプリが作れることを実感できたはずです
  • ウィジェットの使い方やイベント処理を組み合わせれば、自由度の高いUIが作れます
  • 小さなアプリを少しずつ作っていくことで、PySide6の理解が深まります
スポンサーリンク

アプリの配布方法と次のステップ

せっかく作ったアプリ、自分だけで使うのはもったいないですよね。家族や友人、あるいは職場の同僚にも使ってもらいたい…。そんなときは、Pythonアプリを実行形式ファイル(.exeなど)に変換して配布する方法を知っておくと便利です。

この章では、PyInstallerを使った簡単な配布方法と、今後の学習につながるステップをご紹介します。

Pythonアプリを配布するには?

Pythonで作ったアプリは、通常は.pyファイルとして存在しますが、配布先のユーザーがPythonをインストールしていない場合、そのままでは動作しません。

そこで便利なのが「PyInstaller」です。これを使えば、Pythonスクリプトをスタンドアロン形式の実行ファイル(.exe)に変換できます。

PyInstallerのインストール

仮想環境をアクティブにした状態で、以下のコマンドを実行してください。

Bash
pip install pyinstaller

※一度インストールすれば、他のプロジェクトでも使えます。

実行ファイルを作成する

たとえば、先ほどのToDoアプリ(todo_app.py)を変換する場合、以下のコマンドを使います。

Bash
pyinstaller --onefile --windowed todo_app.py

オプションの意味

  • --onefile:すべてのファイルを1つの.exeにまとめる
  • --windowed:コンソールウィンドウを非表示にする(GUIアプリ向け)

このコマンドを実行すると、distフォルダの中にtodo_app.exeという実行ファイルが作成されます。このファイルを配布すれば、Pythonがインストールされていない環境でもアプリが動作します。

注意点と補足

  • アンチウイルスソフトによっては警告が出ることがあります。信頼性のあるソースからの配布と説明が大切です。
  • MacやLinuxでも同様の配布が可能ですが、各OSで実行ファイルを作る必要があります(WindowsでMac用の.appは作れません)。
  • GUIの見た目をカスタマイズしたい場合は、Qt Designerなどのツールを使うのもおすすめです。

PyInstallerについては以下の記事も参考にしてください。

次のステップ:もっと学びたい人へ

PySide6の基礎を学んだ今、さらなるレベルアップのために、以下のような方向に進んでみるのも良いでしょう。

  1. Qt Designerの活用
    • マウス操作でGUIの画面を作れる便利ツール
    • .uiファイルをPythonに変換して使える(pyside6-uicを使用)
  1. データベース連携
    • SQLiteなどのデータベースと連携すれば、アプリに「保存」や「検索」の機能を追加できます
    • sqlite3モジュールはPython標準で使えます
  1. 本格的なアプリケーション構成
    • モジュール分割、クラス設計、MVCアーキテクチャなどを意識した構成で、保守性の高いアプリを目指せます
  1. 他のライブラリと組み合わせる
    • requestsでWeb APIと連携する
    • matplotlibでグラフを表示する
    • openpyxlでExcelデータを扱う
  1. デプロイや自動更新の導入(中級者向け)
    • NSISやInno Setupなどでインストーラを作る
    • アップデート機能を自動化する
  1. 🎥 Udemy講座
    実際に動画を見て勉強したい方には今回は特に以下の講座がオススメですよ!
    以下のリンクからぜひ内容を確認してみてくださいね。

まとめ

  • PyInstallerを使えば、Pythonアプリを簡単に配布できる
  • GUI開発の基礎を学んだら、次は「保存・読み込み」や「デザインの改善」に挑戦してみよう
  • 小さなアプリを一つずつ完成させることで、着実にスキルが身につく

関連記事のご紹介

PySide6をさらに使いこなすには、以下の記事もおすすめです:

brian
brian

ここまで読んでいただきありがとうございます!

UdemyのPythonコースにはオンラインで学習ができる動画コンテンツがたくさんあります。

当ブログのような文章メインの説明では足りない箇所を補えると思うので、もっと詳しく勉強したいという方はぜひチェックしてみてください!

コメント

タイトルとURLをコピーしました