工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> Python

包括的PyQt5チュートリアル:PythonでプロフェッショナルGUIを構築

PyQtとは

PyQtは、QtフレームワークのPythonバインディングであり、Windows、macOS、Linux、Android、iOS、Raspberry PiなどでネイティブGUIアプリケーションを作成するためのクロスプラットフォームC++ライブラリです。バインディングはRiverbank Computing(英国)がメンテナンスし、Qt自体はThe Qt Company(フィンランド)が開発しています。PyQtによりPython開発者はQtの豊富なウィジェット、ネットワーキング、データベース、3D、マルチメディア機能にアクセスできます。

このチュートリアルでは以下を学びます:

PyQt5の主要機能

PyQt5は600以上のクラスを公開し、以下をカバー:

これらの機能により、複雑で高性能なデスクトップおよび組み込みアプリケーションの構築が可能です。LG、メルセデス・ベンツ、AMD、パナソニック、ハーマンなどの大手企業がUIスタックにQtを採用しています。

PyQtバージョン

Riverbank Computingは2つの主要バインディングを提供:

さらに、PyQt3DはQt3DフレームワークのPythonバインディングを提供し、リアルタイム3Dレンダリングとシミュレーションに有用です。

PyQt5のインストール

一般的な2つのインストール方法を説明。コンパイル済みC++バイナリを含み、長いビルドプロセスを回避できるホイールパッケージの使用を推奨します。

方法1:ホイール経由でインストール(推奨)

  1. お好みのターミナルまたはコマンドプロンプトを開く。
  2. pip install PyQt5を実行してホイール(約50 MB)をダウンロード。
  3. インストールが正常に完了したことを確認。

Windowsでの例:

包括的PyQt5チュートリアル:PythonでプロフェッショナルGUIを構築
pip install PyQt5

インストール後、PyQt5.QtWidgetsをインポートしてアプリケーション構築を開始できます。

方法2:ソースからビルド

ソースからのビルドはC++コードをコンパイルするためより複雑です。自分のプラットフォーム用のホイールが利用できない場合やカスタム変更が必要な場合のみ必要です。

PyQt5プログラミングの基礎

以下は「Guru99」とタイトルされた300×300のウィンドウを開く最小例。各行に注釈を付けています。

import sys
from PyQt5.QtWidgets import QApplication, QWidget
if __name__ == "__main__":
    app = QApplication(sys.argv)
    w = QWidget()
    w.resize(300, 300)
    w.setWindowTitle("Guru99")
    w.show()
    sys.exit(app.exec_())

解説:

インタラクティビティの追加

以下の例ではラベル、ボタン、ボタンクリック時に表示されるメッセージボックスを追加。シグナルとスロット、Qtのイベントシステムの核心を示します。

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QPushButton, QMessageBox
def dialog():
    mbox = QMessageBox()
    mbox.setText("Your allegiance has been noted")
    mbox.setDetailedText("You are now a disciple and subject of the all‑knowing Guru")
    mbox.setStandardButtons(QMessageBox.Ok | QMessageBox.Cancel)
    mbox.exec_()
if __name__ == "__main__":
    app = QApplication(sys.argv)
    w = QWidget()
    w.resize(300, 300)
    w.setWindowTitle("Guru99")
    label = QLabel("Behold the Guru, Guru99", w)
    label.move(100, 130)
    btn = QPushButton("Beheld", w)
    btn.move(110, 150)
    btn.clicked.connect(dialog)
    w.show()
    sys.exit(app.exec_())

ボタンクリックでdialog()がトリガーされ、モーダルなQMessageBoxが作成されます。

コアコンポーネントとウィジェット

PyQt5のアーキテクチャはいくつかのモジュールに整理されています。この階層を理解すると、必要なものだけをインポートできます。

モジュール概要

一般的なウィジェット

レイアウト管理

move()とresize()で手動配置する代わりに、Qtはウィンドウサイズに基づいてウィジェットを自動配置するレイアウトマネージャーを提供します。

ボックスレイアウト(HBox & VBox)

QHBoxLayoutはウィジェットを水平に、QVBoxLayoutは垂直に配置。

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QHBoxLayout, QVBoxLayout
app = QApplication([])
win = QWidget()
win.setWindowTitle("Musketeers")
btn1 = QPushButton("Athos")
btn2 = QPushButton("Porthos")
btn3 = QPushButton("Aramis")
hbox = QHBoxLayout(win)
hbox.addWidget(btn1)
hbox.addWidget(btn2)
hbox.addWidget(btn3)
win.show()
app.exec_()

QHBoxLayoutをQVBoxLayoutに置き換えるとボタンが垂直にスタックされます。

グリッドレイアウト

ウィジェットを2次元グリッドに配置。addWidget()メソッドは行・列インデックスとオプションの行・列スパンを受け取ります。

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QGridLayout
app = QApplication([])
win = QWidget()
layout = QGridLayout(win)
for i in range(3):
    for j in range(3):
        layout.addWidget(QPushButton(f"Button {i},{j}"), i, j)
win.show()
app.exec_()

カスタムテーマとスタイル

PyQt5はネイティブテーマとカスタムスタイルシートをサポート。

ビルトインテーマ

app.setStyle("Fusion")や他の利用可能なスタイルでアプリケーションスタイルを設定。

app = QApplication([])
app.setStyle("Fusion")

パレットカスタマイズ

QPaletteを使ってウィジェットの色をプログラムで変更。

from PyQt5.QtGui import QPalette
from PyQt5.QtCore import Qt
palette = QPalette()
palette.setColor(QPalette.ButtonText, Qt.black)
palette.setColor(QPalette.Window, Qt.black)
palette.setColor(QPalette.Button, Qt.gray)
app.setPalette(palette)

Qtスタイルシート(CSSライク)

高度なスタイリングには、ウィジェットやアプリケーション全体にスタイルシートを直接適用。

btn.setStyleSheet("background-color: #4CAF50; color: white; padding: 5px;")

重要なポイント

Python

  1. C#コレクション実践チュートリアル:実例で学ぶ柔軟なデータ管理
  2. Python print()関数の実践ガイド:基本から応用まで
  3. Python str.count()マスター:文字と部分文字列のカウント実例集
  4. Python format()文字列を明確な例でマスター
  5. Python String.find()メソッド完全ガイド:構文、例、代替手法
  6. Pythonラムダ関数をマスターする:実例とベストプラクティス
  7. Python round()関数を実例で徹底解説
  8. Python map()関数をマスター:構文、例、ベストプラクティス
  9. Python timeit():実行時間測定の実例付きガイド
  10. Python collections.Counter:効率的なカウント、更新、演算操作
  11. Python type()とisinstance()の理解:実例付き解説