#PySide6
15 件の記事
PySide6 実践講座 #8 配布の仕上げ — アイコン・バージョン情報、署名、GitHub Actions
シリーズ最終回として、アプリを人に渡せる状態に仕上げます。PyInstaller の spec ファイルでアイコン・名前・リソースを管理する方法、バージョンを一か所で定義してアプリとビルドに供給する方法、署名のないアプリがダウンロード直後にブロックされる理由と macOS 公証・Windows 署名の地形、GitHub Actions のマトリックスで 3 つの OS のビルドを自動化するワークフロー、そしてシリーズ全体の振り返りまで扱います。
PySide6 実践講座 #7 テスト — pytest-qt と層別テスト戦略
GUI アプリはテストしにくいという通念を、層構造で解体します。Qt なしで動く core のテストが最も多くあるべき理由、一時 DB ファイルでリポジトリを検証する方法、qtbot が QApplication とイベントループを代わりに管理してくれる pytest-qt の動作、モデルの契約(rowCount・data・setData)を検証するテスト、シグナル待機(waitSignal)とウィジェット操作のテスト、そして CI で画面なしに Qt のテストを回す方法まで扱います。
PySide6 実践講座 #6 設定画面 — QSettings、ダークテーマ、データバックアップ
ハードコードされていた値をユーザーに渡します。プラットフォームごとの標準の場所に設定を保存してくれる QSettings の使い方と型の罠、設定画面と実際の動作(リマインダー時刻、閉じるボタンの動作)の接続、スタイルシートの差し替えで実装するダーク・ライトテーマとシステムテーマの検知、そしてユーザーデータを尊重する最後のピースである CSV エクスポートと DB バックアップまで扱います。
PySide6 実践講座 #5 トレイ常駐とリマインダー — 閉じても死なないアプリ
習慣トラッカーを本物の道具にする条件、常駐を実装します。QSystemTrayIcon でシステムトレイにアイコンとメニューを出す方法、ウィンドウを閉じる操作を終了ではなく非表示に変える closeEvent の処理とその UX 論争、QTimer で毎日決まった時刻にリマインダー通知を送る方法、トレイ通知の限界と OS ごとの違い、そしてアプリが 2 つ立ち上がってしまうのを防ぐ単一インスタンス処理まで扱います。
PySide6 実践講座 #4 統計画面 — QPainter で草むらヒートマップを描く
既製ウィジェットのない画面を自分で描きます。達成率計算や連続記録といった統計ロジックを Qt のない core 層に置いてテスト可能にする方法、paintEvent と QPainter で GitHub の草スタイルのヒートマップウィジェットを描く方法、座標計算とサイズ対応(sizeHint)、マウス位置のセルを特定してツールチップを出すヒットテスト、そして再描画は update() の呼び出しで依頼するというカスタムウィジェットのルールまで扱います。
PySide6 実践講座 #3 今日画面 — カスタムモデルとチェックのトグル
アプリ最初の本物の画面を作ります。リストウィジェットに直接アイテムを入れる方式が実戦ですぐ限界に達する理由、QAbstractListModel を継承してリポジトリをビューにつなぐカスタムモデル、ロール(role)でデータの複数の顔を公開する方法、チェック状態のトグルがモデルを経て DB まで流れる経路、dataChanged シグナルでビューを正確に更新する方法、習慣追加ダイアログまで扱います。
PySide6 実践講座 #2 SQLite データ層 — リポジトリパターンとマイグレーション
アプリの記憶を担うデータ層を作ります。デスクトップアプリで SQLite がデフォルトである理由、OS ごとに違うアプリデータフォルダを正しく見つける方法、習慣とチェック記録のスキーマ設計、SQL を一か所に閉じ込めるリポジトリパターン、そしてアプリの更新後もユーザーデータが壊れないようにする user_version ベースの超シンプルなマイグレーションまで扱います。
PySide6 実践講座 #1 プロジェクト設計 — 習慣トラッカーを作りながら学ぶアプリ構造
PySide6 入門を終えた人が、実際のアプリひとつを完成まで持っていく実践シリーズの第 1 回です。何を作るのか(ローカルの習慣トラッカー)となぜこの題材なのか、機能要件を画面単位に分解する方法、UI・コア・データの 3 層にコードを分ける構造とその理由、uv ベースのプロジェクトセットアップ、そしてこの先 8 回を支えるメインウィンドウの骨組みまで作ります。
PySide6でデスクトップアプリを作る #6 スレッドとタイマー — 止まらないUI
ボタンに長い処理をつなぐとウィンドウ全体が応答を停止する理由をイベントループの構造から確認し、QThreadとWorkerパターンでUIを止めない定石コードを完成させます。周期処理を担うQTimerまで扱います。
PySide6でデスクトップアプリを作る #5 モデルとビュー — リスト・テーブルにデータをつなぐ
ウィジェットにデータを直接入れる方式の限界を押さえ、Qtのモデル/ビュー構造に進みます。QAbstractTableModelの継承実装、データ変更の通知、QSortFilterProxyModelの検索フィルター、選択処理までToDoテーブルで実習します。
PySide6でデスクトップアプリを作る #4 Qt DesignerとUIファイル — 画面を描いて読み込む
PySide6に同梱されるQt Designerで画面を描き、.uiファイルをpyside6-uicとQUiLoaderの2つの方式で読み込む方法を整理します。コードと画面を分離するワークフローをToDoアプリのフォームで実習します。