🐕

PySide6 入門 001

2024/01/21に公開

PySide6を使ってアプリケーションが作れる漢に俺はなる!

はじめに

PySide6とは

PySideって何?っていう方に説明をするとPySideはQtと呼ばれるマルチプラットフォームGUI開発フレームワークです。Qt自体は、C++言語で記述されています。Pythonにはバインディングと言ってC/C++で書かれたコード呼び出すことができる機能があるので、Qtのバインディングとして開発されたのがPySideというわけです。これにより、PythonでもマルチプラットフォームなGUIアプリケーションを作成できるようになるわけです。

主な特徴

クロスプラットフォーム対応: PySide6はWindows、macOS、Linux、そして一部のモバイルプラットフォームで動作します。
豊富なウィジェット: PySide6には、ボタン、テキストボックス、メニュー、ツールバーなど、多種多様なGUIウィジェットが含まれています。
高度なグラフィックスとアニメーション: Qtの強力なグラフィックスエンジンにより、高品質なグラフィックスとスムーズなアニメーションを実現します。
信頼性と成熟度: Qtは長年にわたり開発されてきた成熟したフレームワークであり、多くの商用アプリケーションで使用されています。LinuxのKDEデスクトップ環境は、Autodesk Maya、VLCメディアプレーヤーなんかがQtで作成されているといわれています。

使用するメリット

簡単な学習曲線: Pythonの直感的な文法とQtの包括的なドキュメンテーションにより、新規ユーザーでも容易に学習できます。
強力な開発ツール: Qt Designerなどのツールを使うことで、GUIのデザインと開発を迅速に行うことができます。
大規模なコミュニティ: QtとPythonは共に大きなコミュニティを持ち、多くのリソースとサポートが提供されています。

PySide6の環境構築

PySide6の環境構築は、他のPythonライブラリと同様にpipコマンドだけですんじゃいます。この点は、C++のQtをインストールするより簡単かもしれません。

pip install PySide6

PySide6のインストールができたら、ついでに関連するツールも入れておきましょう

pip install qt6-tools

これでqt designerなどのツールが使えるようになります。

インストールできたらちゃんと動くかどうか試しに実行してみましょう。

import sys
from PySide6.QtWidgets import QApplication, QLabel

app = QApplication(sys.argv)
label = QLabel('Hello, PySide6!')
label.show()
sys.exit(app.exec())

こんな小さいウィンドウが表示されたら、ちゃんと動作してます。

知っておきたいコンセプト

これからアプリケーションを作る前に、押さえておきたいコンセプトがいくつかあります。

1. シグナルとスロット

PySide6(とQt全体)の大きな特徴の一つが、「シグナルとスロット」という機構です。これは、イベント(ユーザーの操作など)が発生したときに、それをどう処理するかを管理するための仕組みです。ウィジット間の通信に使用されます。

ボタンを例にとると「clicked」シグナルを適切なスロット(関数やメソッド)に接続します。これにより、ボタンがクリックされると、自動的にその関数が呼び出されるわけです。

シグナル ボタンがクリックされた「事実」を伝えるためのメッセージ
スロット ボタンクリックのシグナルを受け取ったときに実行される関数やメソッド

2. ウィジットとレイアウト

PySide6には、ボタン、テキストボックス、ラベルなど、さまざまなウィジェット(GUIコンポーネント)が用意されています。これらを組み合わせて、アプリのインターフェースを作ります。

また、これらのウィジェットをどのように配置するかは、レイアウトによって管理されます。レイアウトを使うと、ウィジェットの位置やサイズを柔軟に調整でき、さまざまな画面サイズや解像度に対応したデザインを容易に作成できます。

最初のアプリケーション作成

シンプルなアプリケーション

とりあえず、シンプルにラベルだけを表示するスクリプトを書いてみてましょう。

simple_application.py
import sys
from PySide6.QtWidgets import QApplication, QMainWindow, QLabel

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.label = QLabel("こんにちは、PySide6の世界へ!")
        self.setCentralWidget(self.label)

app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec())

最初にQApplicationオブジェクト作っていますが、QApplicationは重要な役割を担うオブジェクトでイベントループの管理や、アプリケーション全体の設定やリソースの管理を行ってくれます。最初にQApplicationのインスタンスを作成し、アプリケーションの最後にexec()メソッドを呼び出して、イベントループを開始する必要があります。

Discussion