「Pythonで便利なツールを作ったけど、毎回コマンドを打つのが面倒…」「プログラミングを知らない人にも使ってもらえるような、分かりやすいアプリを作りたい」
そんな風に考えたことはありませんか?
Pythonはデータ分析やWeb開発など、さまざまな分野で活躍していますが、デスクトップで動くGUI(グラフィカル・ユーザー・インターフェース)アプリ開発も得意です。GUIアプリなら、マウス操作で直感的に使えるため、誰にとっても分かりやすいツールを提供できます。
この記事では、PythonのGUIライブラリの中でも、特に高機能でモダンな「PySide6」に焦点を当てて解説します。環境構築から基本的な使い方、さらには開発を効率化するツールまで紹介するので、ぜひ最後までご覧ください。
PythonのGUI開発、どのライブラリを選ぶ?
PythonでGUIアプリを開発しようとすると、いくつかのライブラリが候補に挙がります。それぞれに特徴があるため、目的やスキルに合わせて選ぶことが大切です。ここでは、代表的なライブラリを比較し、なぜPySide6が有力な選択肢なのかを解説します。
主要GUIライブラリ比較(PySide6 vs Tkinter vs Kivy)
まずは、初心者の方がよく目にするであろう3つのライブラリ「PySide6」「Tkinter」「Kivy」を比較してみましょう。
項目 | PySide6 | Tkinter | Kivy |
---|---|---|---|
ライセンス | LGPL(商用利用しやすい) | Python標準(商用可) | MIT(商用可) |
デザイン性 | モダンで美しいUIを作りやすい | シンプルで古典的 | 独創的、カスタマイズ性が高い |
機能性 | 非常に高機能、豊富な部品 | 基本的な機能に特化 | マルチタッチなどスマホ向け機能が豊富 |
学習コスト | やや高め | 低い(Python標準で手軽) | 中程度 |
クロスプラットフォーム | ◎(Windows, macOS, Linux) | ◎(Windows, macOS, Linux) | ◎(PC + iOS, Android) |
こんな人におすすめ | 高機能・高品質なデスクトップアプリを作りたい人 | 手軽にGUI開発を試したい初心者 | PCとスマホ両対応のアプリを作りたい人 |
このように、それぞれに一長一短があります。Tkinterは手軽さが魅力ですが、デザインの自由度は低めです。Kivyはスマホアプリも視野に入れるなら強力な選択肢になります。そしてPySide6は、少し学習コストはかかりますが、本格的で見た目の良いデスクトップアプリを作りたい場合に最適なライブラリと言えるでしょう。
なぜ今PySide6が注目されるのか?4つのメリット
PySide6が多くの開発者から選ばれるのには、明確な理由があります。特に大きなメリットは以下の4つです。
- 世界中で使われる「Qt」がベース
PySide6は「Qt(キュート)」という、C++で開発された非常に有名なフレームワークをPythonで使えるようにしたものです。Qtは、Adobe製品やBlenderなど、世界中の多くのプロフェッショナルなソフトウェアで採用実績があり、その信頼性や機能性は折り紙付きです。 - 商用利用しやすいLGPLライセンス
よく比較される「PyQt6」はデュアルライセンス(GPL v3 + 商用ライセンス)を採用しています。無料で使う場合はGPLライセンスが適用され、作成したアプリのソースコードを公開する義務が生じることがあります。ソースコードを公開したくない場合は、商用ライセンスの購入が必要です。一方、PySide6はLGPLライセンスを採用しているため、ライセンスを購入することなく、開発したアプリをソースコード非公開のまま販売・配布できます。これはビジネスで利用する上で大きなメリットです。 - モダンで美しいUIデザイン
Qtフレームワークは、標準で用意されているボタンやテキストボックスなどの部品(ウィジェット)が洗練されており、OSの見た目に合わせたモダンなUIを簡単に構築可能です。スタイルシートを使えば、Webページのようにデザインを細かくカスタマイズすることもできます。 - 豊富な機能と開発ツール
基本的なウィジェットはもちろん、グラフ描画、データベース連携、マルチメディア再生など、高度な機能も標準でサポートしています。また、後述する「Qt Designer」を使えば、ドラッグ&ドロップの直感的な操作で画面デザインを作成でき、開発効率を飛躍的に向上させられます。
PySide6を始めよう!環境構築から基本のコードまで
PySide6の魅力が分かったところで、早速インストールして動かしてみましょう。環境構築は非常に簡単で、最初のプログラムも数行で書けます。
PySide6のインストールはpipコマンド一発
PySide6は、Pythonのパッケージ管理ツールであるpipを使って簡単にインストールできます。ターミナル(WindowsならコマンドプロンプトやPowerShell)を開いて、以下のコマンドを実行するだけです。
pip install PySide6
pipはパッケージ名の大文字・小文字を区別しないため pyside6
でもインストールできますが、公式のパッケージ名に合わせて PySide6
と記述するのがより正確です。
これだけで、PySide6本体と、UI開発をサポートするツール群がまとめてインストールされます。もし特定のプロジェクトだけで使いたい場合は、Python公式で推奨されている python -m venv
コマンドで仮想環境を作成してからインストールすることをおすすめします。仮想環境を使えば、他のプロジェクトやPC全体の環境を汚さずに済みます。
サンプルコード:最初のウィンドウを表示する
インストールが完了したら、いよいよ最初のGUIアプリを作成します。まずは、空のウィンドウを表示させるだけの簡単なコードを書いてみましょう。以下のコードをmain.py
のような名前で保存してください。
import sys
from PySide6.QtWidgets import QApplication, QMainWindow
# QApplicationインスタンスを作成
# sys.argvはコマンドライン引数を渡すために必要
app = QApplication(sys.argv)
# メインウィンドウを作成
window = QMainWindow()
window.setWindowTitle('はじめてのPySide6アプリ') # ウィンドウのタイトルを設定
window.resize(400, 300) # ウィンドウのサイズを設定
# ウィンドウを表示
window.show()
# アプリケーションのイベントループを開始
# ウィンドウが閉じられるまでここで待機する
sys.exit(app.exec())
このファイルを保存して、ターミナルからpython main.py
と実行してみてください。画面に「はじめてのPySide6アプリ」というタイトルがついた、400×300サイズのウィンドウが表示されれば成功です。app.exec()
は、ユーザーからの操作(クリックや閉じるボタンなど)を待ち受けるための「イベントループ」を開始する重要な役割を担っています。
PySide6の基本をマスター!主要ウィジェットとレイアウト
ウィンドウを表示できたら、次は画面に文字やボタンを配置してみましょう。ここでは、UIの基本となる「ウィジェット」と、それらをきれいに並べるための「レイアウト」について解説します。
UIの部品「ウィジェット」を使ってみよう
PySide6では、ボタン、ラベル、テキスト入力欄など、画面を構成するあらゆる部品を「ウィジェット」と呼びます。まずは代表的なウィジェットであるQLabel
(ラベル)とQPushButton
(ボタン)を使ってみましょう。
先ほどのコードを少し改造して、ウィンドウの中にこれらのウィジェットを配置します。
import sys
from PySide6.QtWidgets import QApplication, QMainWindow, QLabel, QPushButton
app = QApplication(sys.argv)
window = QMainWindow()
window.setWindowTitle('ウィジェットのテスト')
window.resize(400, 300)
# ラベルを作成してウィンドウに配置
label = QLabel('こんにちは、PySide6!', parent=window)
label.move(20, 20) # 表示位置を(x, y)で指定
# ボタンを作成してウィンドウに配置
button = QPushButton('クリックしてね', parent=window)
button.move(20, 60)
window.show()
sys.exit(app.exec())
parent=window
とすることで、そのウィジェットがウィンドウの子要素であることを示します。move()
メソッドで表示位置をピクセル単位で指定していますが、これだとウィンドウサイズが変わったときにレイアウトが崩れてしまいます。この問題を解決するのが、次にご紹介する「レイアウト管理」です。
ボタンクリックに応答する「シグナルとスロット」
ボタンを配置しただけでは、クリックしても何も起きません。クリックという操作(シグナル)に対して、特定の処理(スロット)を結びつける仕組みが必要です。これがPySide6(Qt)の基本的なイベント処理モデルである「シグナルとスロット」です。
以下のように、ボタンがクリックされたときにコンソールにメッセージを出力する処理を追加してみましょう。
# ...(前述のコードの続き)
# ボタンがクリックされたときに呼び出す関数(スロット)を定義
def on_button_clicked():
print('ボタンがクリックされました!')
# ボタンのclickedシグナルと、定義したスロットを結びつける
button.clicked.connect(on_button_clicked)
window.show()
sys.exit(app.exec())
button.clicked
がシグナルで、.connect()
メソッドを使って自作のon_button_clicked
関数(スロット)を接続しています。これで、ボタンをクリックするたびにターミナルに「ボタンがクリックされました!」と表示されるようになります。この仕組みを応用すれば、「ボタンを押したら計算する」「ファイルを保存する」といった様々な機能を実装できます。
見た目を整える「レイアウト管理」の基礎
move()
で座標を直接指定する方法は、ウィンドウサイズが変わるとレイアウトが崩れてしまうため、実用的ではありません。そこで、PySide6では「レイアウトマネージャ」を使ってウィジェットを自動で整列させるのが一般的です。
QVBoxLayout
(垂直に並べる)とQHBoxLayout
(水平に並べる)が最もよく使われます。
import sys
from PySide6.QtWidgets import QApplication, QWidget, QLabel, QPushButton, QVBoxLayout
app = QApplication(sys.argv)
# QMainWindowではなく、汎用的なQWidgetをメインウィンドウとして使う
main_widget = QWidget()
main_widget.setWindowTitle('レイアウトのテスト')
# 部品を作成
label = QLabel('ウィジェットは自動で整列します')
button = QPushButton('クリック')
# 垂直レイアウトを作成し、ウィジェットを追加
layout = QVBoxLayout()
layout.addWidget(label)
layout.addWidget(button)
# メインウィジェットにレイアウトを設定
main_widget.setLayout(layout)
main_widget.show()
sys.exit(app.exec())
このコードでは、ラベルとボタンが上から順にきれいに並べられます。ウィンドウのサイズをマウスで変えてみてください。それに合わせてウィジェットのサイズも自動で調整されるはずです。このようにレイアウトを使うことで、どんな画面サイズでも見やすいUIを維持できます。
さらにステップアップ!Qt Designerで効率化
コードだけでUIを組み立てるのは、慣れないうちは少し大変かもしれません。そんなときに役立つのが、GUI操作で画面をデザインできる「Qt Designer」という強力なツールです。
Qt Designerとは?ドラッグ&ドロップでUI設計
Qt Designerは、PySide6をインストールすると一緒に使えるようになる公式のUIデザインツールです。左側のウィジェットボックスからボタンやラベルなどをドラッグ&ドロップで配置し、右側のプロパティエディタでサイズやテキストなどを設定するだけで、直感的に画面を設計できます。
ターミナルで以下のコマンドを実行すると起動します。
pyside6-designer
また、環境によっては python -m PySide6.Designer
でも起動できます。
起動したら、「新しいフォーム」ダイアログで「Main Window」を選んで「作成」ボタンを押すと、デザインを開始できます。まるでプレゼン資料を作るような感覚で、複雑な画面レイアウトも簡単に組み立てることが可能です。
.uiファイルをPythonコードに読み込む方法
Qt Designerで作成したデザインは、.ui
という拡張子のXMLファイルとして保存されます。この.ui
ファイルをPythonプログラムから読み込んで利用するのが一般的です。これにより、UIの見た目(デザイン)とプログラムの動作(ロジック)を分離でき、管理しやすくなるという大きなメリットがあります。
.ui
ファイルを読み込むには、QUiLoader
というクラスを使います。
# main.py
import sys
from PySide6.QtUiTools import QUiLoader
from PySide6.QtWidgets import QApplication
# .uiファイルを読み込むための準備
loader = QUiLoader()
app = QApplication(sys.argv)
# designer.uiというファイルを読み込む
window = loader.load('designer.ui', None)
window.show()
sys.exit(app.exec())
このコードと同じ階層に、Qt Designerで作成・保存したdesigner.ui
ファイルを置いて実行します。すると、コード上では一切ウィジェットを定義していないにもかかわらず、デザインした通りのウィンドウが表示されます。あとは、window.findChild()
といったメソッドを使ってUI上のボタンなどを取得し、シグナルとスロットを接続していけば、アプリケーションが完成します。
Python GUI開発をはじめよう!おすすめライブラリ7選を徹底比較
まとめ:PySide6でGUIアプリ開発の第一歩を踏み出そう
この記事では、PythonのGUIライブラリPySide6について、その魅力から基本的な使い方、そして開発を効率化するQt Designerまでを解説しました。
- PySide6は高機能でモダンなUIを作れる強力なライブラリ
- LGPLライセンスにより商用利用もしやすい
- インストールは
pip install PySide6
で完了 - ウィジェットを配置し、シグナルとスロットで動作を定義するのが基本
- レイアウトを使えば、ウィンドウサイズが変わっても見た目が崩れない
- Qt Designerを使えば、UIデザインとロジックを分離して効率的に開発できる
PySide6は、Tkinterに比べると覚えることは少し多いかもしれません。しかし、その分だけやれることの幅は広く、高品質なアプリケーションを開発できます。今回学んだ知識を土台に、次は簡単な電卓やToDoリストアプリなど、身の回りのツール作りに挑戦してみてはいかがでしょうか。
PySide6の世界は非常に奥が深いですが、その第一歩を踏み出すお手伝いができていれば幸いです。