DelphiFMX for Python入門 ― FireMonkeyで作るクロスプラットフォームGUI
DelphiFMX for Python入門 ― FireMonkeyで作るクロスプラットフォームGUI
<!--
Qiita推奨タグ:Python Delphi FireMonkey GUI クロスプラットフォーム
-->
<!--
Qiita投稿用メモ(公開時はこのコメントを削除して構いません)
タイトル案:DelphiFMX for Python入門 ― FireMonkeyで作るクロスプラットフォームGUI
推奨タグ(5個):Python, Delphi, FireMonkey, GUI, クロスプラットフォーム
確認日:2026-10-27
本文中のPythonコードは公式QuickstartとサンプルのAPIに沿った説明用コードです。
実機でのGUI起動・各OSでの動作検証は行っていません。
図の差し替え一覧:
図1 images/fig01_delphifmx_architecture.png Python・Python4Delphi・FireMonkeyの関係
図2 images/fig02_form_and_events.png フォームとイベントの流れ
図3 images/fig03_fmx_exporter_workflow.png DelphiのGUIデザイナーとExporter
図4 images/fig04_data_app_architecture.png データ解析GUIの応用構成
-->
Pythonでデスクトップアプリケーションを作る場合、TkinterやPySide6、PyQtなどを使う方法がよく知られています。これらに加えて、DelphiのGUIフレームワークをPythonから利用する方法もあります。それが DelphiFMX for Python です。
Delphiと聞くとObject Pascalで開発するイメージが強いかもしれませんが、DelphiFMXでは画面の作成やイベント処理をPythonで記述できます。Windowsだけでなく、LinuxやmacOSも対象にできる点が、Windows専用のDelphiVCLとの大きな違いです。
この記事では、DelphiFMXの仕組みから環境構築、簡単なGUIプログラム、公開サンプル、実務で使う際の注意点まで整理します。後半では、Pythonによるデータ処理と組み合わせる構成も考えてみます。
> 確認したバージョンと範囲
> 2026年10月27日に確認したPyPIの最新版は DelphiFMX 1.1.0(2025年3月31日公開) です。この記事のコードは公式ドキュメントにあるAPIの使い方に基づいていますが、筆者の環境ですべてのスクリプトの実行確認した結果ではありません。OSごとのGUIランタイムや配布方法については、実際の導入環境で確認してください。
1. DelphiFMXとは
DelphiFMXは、Embarcaderoが公開しているPython向けGUIモジュールです。delphifmx という名前でPyPIに登録されており、次のコマンドで導入できます。
python -m pip install delphifmx
内部では、Delphi向けの FireMonkey(FMX) というGUIフレームワークを利用します。PythonとDelphiの橋渡しには Python4Delphi の技術が使われています。
FireMonkeyは、クロスプラットフォーム向けに設計されたGUIフレームワークです。フォーム、ボタン、入力欄、表などの部品を扱えるほか、スタイルによる見た目の変更にも対応しています。描画には環境に応じてGPUアクセラレーションを利用できます。
ここでいうGPUの利用は画面描画の話です。NumPyや数値シミュレーションの計算が、DelphiFMXを入れただけでGPU処理になるわけではありません。
!fig01_delphifmx_architecture.png
図1 PythonからFireMonkeyを利用する仕組み。Androidへの配布には別途ビルド工程が必要です。
DelphiやObject Pascalを使った経験がなくても、Pythonコードからフォームや部品を操作できるのが特徴です。ビジュアルデザイナーを使いたい場合は、後述する追加ツールを利用します。
公式サイトとソースコードは次の場所に公開されています。
- DelphiFMX4Python(公式GitHub)
- DelphiFMX公式ドキュメント
- delphifmx(PyPI)
2. 対応OSとPythonバージョン
公開されている対応範囲は次のとおりです。
| 環境 | 状況 | 備考 |
| --- | --- | --- |
| Windows(32bit・64bit) | 対応 | デスクトップGUIを直接実行できます |
| Linux(x86_64) | 対応 | GUI表示に必要な環境の準備が必要です |
| macOS(Intel) | 対応 | 対応するwheelを利用します |
| macOS(Apple Silicon) | 対応 | ARM64向けwheelが配布されています |
| Android(ARM64) | 専用ツールで対応 | PythonFMXBuilderによるアプリ化が必要です |
| iOS | 対応を確認できず | FireMonkey本体の対応範囲とは区別してください |
公式GitHubのREADMEでは、CPython 3.8~3.13 がサポート対象として案内されています。PyPIにもPython 3.12および3.13向けのOS別wheelが登録されています。一方、古い公式Installationページでは3.6~3.11と記載されているため、バージョン選定では現在配布されているwheelを確認するのが確実です。
Python 3.14以降については、この記事で対応を確認していません。
> 補足
> Python向けのDelphiFMXが動作するOSと、Delphi製品のFireMonkeyそのものが対応するOSは、必ずしも一致しません。また、各プラットフォームで同じ画面表示になることや、追加設定なしに動作することを保証するものではありません。
3. インストールする
まずはWindows上で起動を確認するのが分かりやすいと思います。その後、Linuxなど別の環境へ広げると問題を切り分けやすくなります。
3.1 Windows 11
PowerShellでPython 3.12の仮想環境を作成します。
# Python 3.12で仮想環境を作成
py -3.12 -m venv .venv
# 仮想環境を有効化
.\.venv\Scripts\Activate.ps1
# pipを更新してDelphiFMXを導入
python -m pip install --upgrade pip
python -m pip install delphifmx==1.1.0
# Pythonから読み込めるか確認
python -c "import delphifmx; print('DelphiFMX OK')"
DelphiFMX OK と表示されれば、少なくともモジュールの読み込みは成功しています。GUIの表示まで確認できたわけではないので、後述のサンプルも動かしてみます。
3.2 Ubuntu 24.04 / WSL2
Ubuntu 24.04の標準Pythonは3.12系です。仮想環境を作り、Windowsの場合と同様にインストールします。
sudo apt update
sudo apt install -y python3 python3-venv python3-pip
mkdir -p ~/delphifmx-demo
cd ~/delphifmx-demo
python3 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install delphifmx==1.1.0
python -c "import delphifmx; print('DelphiFMX OK')"
LinuxでGUIを表示するには、ディスプレイサーバーや描画用ランタイムが必要です。Windows 11のWSL2でGUIアプリケーションを動かす場合はWSLgを使えますが、DelphiFMX固有の依存ライブラリについても動作環境に応じて確認してください。
Dockerコンテナに入れて使う場合も同様です。pip install だけでは画面は表示されません。ディスプレイの接続、OpenGL関連のライブラリ、フォントなどの扱いを別途設計する必要があります。
4. 最初のGUIアプリケーション
インストールできたら、ウィンドウを1枚表示してみます。次の内容を hello_fmx.py として保存します。
"""DelphiFMXでウィンドウを表示する最小サンプル。"""
from delphifmx import Application, Form
def main() -> None:
"""GUIアプリケーションを起動する。"""
Application.Initialize()
Application.Title = "Hello DelphiFMX"
# メインウィンドウを作成
window = Form(Application)
window.SetProps(Caption="Hello DelphiFMX")
window.SetBounds(100, 100, 600, 360)
Application.MainForm = window
# ウィンドウを表示し、操作を受け付ける
window.Show()
try:
Application.Run()
finally:
window.Destroy()
if __name__ == "__main__":
main()
起動方法は通常のPythonスクリプトと同じです。
python hello_fmx.py
Application.Initialize() はアプリケーションを初期化し、Form(Application) でフォームを作成します。Application.MainForm に登録してから Show() で表示し、Application.Run() でイベントループを開始します。ウィンドウを閉じてイベントループが終わった後は、Destroy() でフォームを破棄します。
SetBounds(100, 100, 600, 360) は、左上の位置と幅・高さを指定するためのメソッドです。
5. ボタンとイベント処理
もう少しGUIらしい例として、ボタンを押すたびにカウンターが増えるアプリケーションを作ります。使用する部品は Form、Label、Button の3つだけです。
!fig02_form_and_events.png
図2 フォームに部品を配置し、クリックイベントで表示を更新する流れ。
counter_fmx.py として保存するコードを示します。
"""DelphiFMXのボタンイベントを確認するサンプル。"""
from delphifmx import Application, Button, Form, Label
def main() -> None:
"""フォームとイベントハンドラーを作成する。"""
Application.Initialize()
Application.Title = "FMX Counter"
form = Form(Application)
form.SetProps(Caption="DelphiFMX Counter")
form.SetBounds(100, 100, 420, 250)
# 表示用ラベルをフォーム上に配置
label = Label(form)
label.SetProps(Parent=form, Text="カウント: 0")
label.SetBounds(40, 35, 250, 40)
# クリック用ボタンを配置
button = Button(form)
button.SetProps(Parent=form, Text="カウントを増やす")
button.SetBounds(40, 95, 180, 44)
count = 0
def on_click(sender: object) -> None:
"""クリック時にカウントと表示文字列を更新する。"""
nonlocal count
count += 1
label.Text = f"カウント: {count}"
# FireMonkeyのクリックイベントへPython関数を登録
button.OnClick = on_click
Application.MainForm = form
form.Show()
try:
Application.Run()
finally:
form.Destroy()
if __name__ == "__main__":
main()
ポイントは、次の1行です。
button.OnClick = on_click
FireMonkeyのイベントにPythonの関数を登録しています。クリックされると、その関数が呼ばれ、Label.Text の文字列を更新します。DelphiFMXではGUI部品の作成だけでなく、操作後の処理もPythonで記述できます。
この例は公式Quickstartで紹介されているイベント登録の方法を基にした説明用コードです。Python構文は確認していますが、実際のGUI描画やイベントの動作は実機未検証です。
6. どのようなGUI部品があるのか
FireMonkeyには、一般的な業務アプリケーションでよく使う部品が用意されています。ここでは代表的なものを挙げます。
| 部品 | 用途 |
| --- | --- |
| Form | ウィンドウ |
| Label | 文字や数値の表示 |
| Button | ボタン操作 |
| Edit / Memo | 文字入力 |
| CheckBox / RadioButton | 項目の選択 |
| ComboBox / ListBox | 選択肢や一覧の表示 |
| Grid / StringGrid | 表形式のデータ表示 |
| ProgressBar | 処理の進捗表示 |
| TabControl | タブによる画面切り替え |
| Image | 画像表示 |
| Layout / GridLayout | 部品の配置 |
| StyleBook | 外観スタイルの管理 |
| OpenDialog | ファイルを開くためのダイアログ |
部品には、表示文字列、位置、サイズなどのプロパティがあり、必要に応じてイベントを設定します。フォーム上に部品を置くだけでなく、親子関係やレイアウトを整理しておくと、画面が複雑になったときにも管理しやすくなります。
使えるクラスやプロパティは公式APIリファレンスで確認できます。
7. サンプルとデモを探す
公式GitHubには、実際に動かして読み進められるサンプルがあります。最初は次の2つを見るとよいでしょう。
- Simplest.py:ウィンドウとラベルを表示する基本例
- ToDoList.py:入力欄、ボタン、一覧を使う例
リポジトリをまとめて取得するには、次のように実行します。
git clone https://github.com/Embarcadero/DelphiFMX4Python.git
cd DelphiFMX4Python
# インストール済みのPython環境で実行
python samples/Simplest.py
python samples/ToDoList.py
公式にはQuickstartもあり、基本的なフォームからToDoアプリまで段階的に説明されています。なお、Example Galleryは確認時点では整備中と案内されています。
DelphiFMXはWebブラウザ上で実行するライブラリではありません。そのため、公開デモサイトを探すより、まずローカル環境でサンプルを実行してGUIの表示を確かめる方がよいと思います。
8. GUIデザイナーも利用できる
ここまでの例では、画面上の部品をすべてPythonコードから作成しました。DelphiまたはRAD Studioのビジュアルデザイナーを使ってフォームを作りたい場合は、Delphi4PythonExporter という追加ツールも利用できます。
フォーム上にボタンや入力欄を配置してからPython向けにエクスポートし、その画面をPythonから使う流れです。
!fig03_fmx_exporter_workflow.png
図3 Delphiのデザイナーで作成したフォームをPythonから利用する構成。
公式READMEでは、RAD Studio 13 FlorenceなどでExporterを導入し、フォームを作成してから Tools → Export to Python を選ぶ方法が説明されています。ExporterはDelphi/RAD Studio側で使うツールなので、対応IDEとライセンスについては別途確認する必要があります。
一方、Pythonコードだけでフォームを作る使い方であれば、Delphi IDEを導入する必要はありません。
- Delphi4PythonExporter(公式GitHub)
9. Androidアプリにする場合
DelphiFMXはAndroidも対象としていますが、WindowsやLinuxのようにPythonスクリプトをそのまま起動する方法とは異なります。
Android向けには、PythonFMXBuilder という専用ツールが用意されています。PythonスクリプトをAndroidアプリに組み込み、端末へのインストールや配布ができる形式へまとめます。
ただし、Android SDKやJDKなどの準備が必要です。動作環境、パッケージ化の条件、最新のビルダーの制約は事前に確認してください。
- PythonFMXBuilder(公式GitHub)
10. DelphiVCLやPySide6との違い
PythonでGUIを作る場合、DelphiFMX以外にも有力な選択肢があります。何を作るかによって、使い分けが変わります。
| 比較項目 | DelphiVCL | DelphiFMX | PySide6 |
| --- | --- | --- | --- |
| GUIの基盤 | VCL | FireMonkey | Qt |
| Windows | 対応 | 対応 | 対応 |
| Linux | 非対応 | 対応 | 対応 |
| macOS | 非対応 | 対応 | 対応 |
| Android | 非対応 | 専用ツールで対応 | 専用の展開・配布工程が必要 |
| GUIの外観 | Windowsらしい部品 | FMXのスタイル | Qtのスタイル |
| 画面設計 | Delphi系ツール | Delphi系ツール | Qt Designer等 |
| 主な用途 | Windows業務GUI | 複数OS向けGUI | 幅広いデスクトップGUI |
Windows専用で従来の業務アプリらしい外観を重視するならDelphiVCL、複数OSを対象にFireMonkeyのスタイルを使いたいならDelphiFMXが候補になります。PySide6はQtのコンポーネントや開発ツールを使えるので、機能の多いアプリケーションを作る場合には比較しておきたいところです。
実際には、表の表示速度、データ件数が増えたときの応答、配布ファイルの作りやすさなども選定に影響します。小さな試作を同じ機能で作って比べると判断しやすくなります。
11. データ処理用のGUIとして使う
DelphiFMXは、データを計算するためのライブラリではなく、計算結果を操作・表示するためのGUIです。この役割分担を意識すると、Pythonの既存ライブラリと組み合わせやすくなります。
例えば、AMeDASの降水量や河川水位のデータを取得し、DuckDBに保存した後、GUIで期間や地点を選んで確認するアプリケーションを考えてみます。
!fig04_data_app_architecture.png
図4 データ取得・保存・解析をPythonに任せ、画面操作をDelphiFMXが担当する構成。
この構成では、GUIは入力条件の指定や結果表示を担当し、データ取得・解析処理は別のPythonモジュールに分けます。計算処理の部分をGUIから切り離しておくと、後からCLI実行やバッチ処理に流用しやすくなります。
グラフについては、例えばMatplotlibでPNGを作成し、FMXの画像表示部品に読み込ませる方法が考えられます。ただし、Matplotlibの対話的な描画ウィジェットをそのまま埋め込めるわけではありません。画面内でズームや再描画をしたい場合は、そのための実装を追加する必要があります。
また、OpenLayersなどのWeb GISを利用したい場合は、デスクトップGUIへの埋め込みを前提にせず、ブラウザ側に地図表示を分離する構成も候補になります。
12. 実務で利用する前に確認したいこと
まず試したいのは、OSごとに最小ウィンドウが正しく表示されるかどうかです。特にLinuxやWSL2では、Pythonパッケージ以外のGUI関連ライブラリが必要になる場合があります。
次に、長い時間がかかる処理の扱いです。GUIのイベント処理と同じスレッドで大量のデータ取得や数値計算を実行すると、画面が固まって見えることがあります。必要に応じてワーカースレッドや別プロセスに分け、GUIの更新は適切なスレッドから行う設計にします。
配布方法も早めに確認しておくと安心です。Pythonコードだけでなく、ネイティブの実行ライブラリやPythonのランタイム、環境によっては追加の共有ライブラリも必要になります。Windowsで動いたアプリをそのままLinuxにコピーして動かせるとは限りません。
ライセンスにも注意してください。公式READMEでは、再配布ライブラリにはEmbarcadero Freeware License、ソースコードにはMITライセンスが適用されると説明されています。商用利用や再配布の際は、実際に同梱するファイルと適用条件を確認してください。「無料でインストールできる」ことと、すべての配布形態が無条件で許可されることは同じではありません。
まとめ
DelphiFMXを使うと、PythonからFireMonkeyのフォームやGUI部品を操作できます。Windowsに加えてLinuxやmacOSを対象にできること、Pythonのデータ処理をそのまま利用できることが特徴です。
一方で、LinuxのGUIランタイムやアプリケーションの配布方法、Android向けのビルド工程などは、最小サンプルを動かしただけでは確認できません。実際の業務アプリケーションに採用する場合は、こうした点も含めて検証する必要があります。
最初は今回の最小フォームとカウンターアプリを試し、その次にCSVの読み込み、表の表示、ファイル出力へ進むとよいと思います。同じ機能をPySide6などで実装して比較すると、開発しやすさや使い勝手の違いも見えてきます。
次は、簡単なプログラムを作成して、機能を拡張していきたいと考えています。
参考資料
- Embarcadero / DelphiFMX4Python(GitHub)
- DelphiFMX Documentation(公式ドキュメント)
- DelphiFMX Quickstart(基本コード)
- DelphiFMX API Reference(クラス・プロパティ)
- delphifmx(PyPI・配布バージョン)
- Embarcadero / Delphi4PythonExporter(GitHub)
- Embarcadero / PythonFMXBuilder(GitHub)
---
2 likes
PythonからDelphiのWindows GUIを使う ― DelphiVCLの基本・公式サンプル・アプリ作成
PythonからDelphiのWindows GUIを使う ― DelphiVCLの基本・公式サンプル・アプリ作成
はじめに
PythonでWindows向けのデスクトップアプリを作ろうとすると、まずTkinterやPySide6などが候補に挙がります。もう一つ覚えておきたいのが、DelphiVCL for Python です。
DelphiVCLは、Delphiで長く使われてきたGUIフレームワーク「VCL(Visual Component Library)」をPythonから利用できるようにしたモジュールです。Windowsの標準的な操作感を持つウィンドウを作り、ボタンを押したらPythonの関数を呼び出す、といったプログラムを書けます。
本記事では、DelphiVCLの仕組みを確認したあと、公式サンプルとデモの場所、インストール方法、簡単なGUIアプリの作成まで進めます。後半では、CSVやデータベースを使う業務ツールへの応用も考えてみます。
なお、DelphiVCLはWindows専用です。Linuxで動くPython GUIライブラリではない点には注意してください。
> 確認日:2026年10月27日
> PyPIで確認できるdelphivclの公開版は1.0.7(2025年3月31日公開)です。パッケージの配布状況は変更されることがあるため、導入時はPyPIでも確認してください。
1. DelphiVCLとは
DelphiのGUIをPythonから利用する
Delphiでは、フォームにボタンや入力欄を配置し、操作に応じて処理を実行するWindowsアプリを開発できます。DelphiVCLを使うと、そのVCLのコンポーネントをPythonから扱えます。
例えば次のような部品が利用できます。
| コンポーネント | 役割 | 使用例 |
| --- | --- | --- |
| Form | ウィンドウ | メイン画面 |
| Label | 文字表示 | 項目名、説明 |
| Edit | 1行入力 | 検索条件、観測所名 |
| Button | ボタン | 実行、登録、保存 |
| ListBox | リスト表示 | ファイル、地点の一覧 |
| ComboBox | 選択欄 | 対象地点や処理方式の切り替え |
| CheckBox | チェック欄 | オプション指定 |
| PageControl | タブ画面 | 設定画面の分類 |
| TreeView | 階層表示 | データフォルダー、プロジェクト構成 |
| StringGrid | 表形式の表示 | 検索結果や時系列データ |
| OpenDialog / SaveDialog | ファイル選択 | CSVの読み込みと保存 |
| StatusBar | 状態表示 | 処理件数、メッセージ |
ここに挙げたものは、DelphiVCLのAPIリファレンスに掲載されているコンポーネントの一部です。Delphi本体にある全コンポーネントや市販のVCLコンポーネントが、Pythonから無条件に使えるわけではありません。
Python4Delphiとの違い
DelphiVCLの内部では、DelphiとPythonを橋渡しする Python4Delphi が使われています。ここは名前が似ていて混同しやすい部分です。
- DelphiVCL:PythonからWindows向けのVCLコンポーネントを使うためのモジュールです。
- Python4Delphi:DelphiとPythonを連携させるための基盤です。Delphi側からPythonを呼び出す用途も含みます。
- DelphiFMX:FireMonkey(FMX)を使った、複数OS向けGUIの別モジュールです。
- Delphi4PythonExporter:Delphiのフォームデザイナーで作った画面を、Python向けに出力するツールです。
DelphiVCLで簡単な画面を作るだけなら、Delphi IDEを別途導入する必要はありません。Pythonコードでフォームやボタンの配置を記述できます。
<!-- FIG01_START: images/fig01_delphivcl_architecture.png -->
!fig01_delphivcl_architecture.png
図1:DelphiVCLの位置付け。PythonからDelphiのVCLを経由し、WindowsのGUIを利用します。
2. 動作環境とインストール
対応環境
現在配布されているパッケージの主な対象は次のとおりです。
| 項目 | 内容 |
| --- | --- |
| OS | Windows |
| CPUアーキテクチャ | x86(32bit)/ x86-64(64bit) |
| Python | CPython 3.8~3.13に対応するwheelが公開されています |
| インストール方法 | pip(venv、conda環境でも利用可能) |
| Delphi IDE | PythonコードによるGUI開発だけなら不要 |
公式ドキュメントの一部には、以前のPython対応範囲が残っています。ここでは2026年10月27日時点でPyPIに掲載されているwheelの情報を基準にしています。
Windows 11では、まず64bit版Python 3.12で試すとよいでしょう。以下はWindows PowerShellで実行します。WSL2のUbuntuターミナルではありません。
# 作業フォルダー
mkdir delphivcl_test
cd delphivcl_test
# Python 3.12を利用する仮想環境
py -3.12 -m venv .venv
# PowerShellの実行ポリシーを変更せずに、仮想環境内のPythonを直接使用
.\.venv\Scripts\python.exe -m pip install --upgrade pip
.\.venv\Scripts\python.exe -m pip install delphivcl==1.0.7
# インポートを確認
.\.venv\Scripts\python.exe -c "from delphivcl import Form, Button; print(Form, Button)"
エラーになった場合は、利用中のPythonのバージョンと32bit/64bitの組み合わせを確認してください。
.\.venv\Scripts\python.exe --version
.\.venv\Scripts\python.exe -c "import platform; print(platform.architecture())"
3. まずは最小のウィンドウを表示する
最初はボタンも入力欄もないウィンドウを作ります。公式Quickstartと同じ基本的な流れです。
"""DelphiVCLで空のWindowsフォームを表示する最小サンプル。"""
from delphivcl import Application, Form
def main() -> None:
"""VCLの初期化、フォームの表示、終了処理を行う。"""
Application.Initialize()
Application.Title = "DelphiVCL Sample"
form = Form(Application)
form.Caption = "Hello DelphiVCL"
form.SetBounds(150, 100, 520, 320)
form.Show()
# ウィンドウが閉じられるまでGUIイベントを処理する
Application.Run()
form.Destroy()
if __name__ == "__main__":
main()
実行コマンドは次のとおりです。
.\.venv\Scripts\python.exe .\hello_vcl.py
Application.Initialize()でアプリケーションを初期化し、Form(Application)でウィンドウを作成しています。Application.Run()はWindowsのイベントを処理するメッセージループです。ウィンドウが閉じられると、後続の終了処理に進みます。
公式QuickstartにはFreeConsole()を使う例もありますが、最初の動作確認では付けない方が、標準出力や例外を確認しやすくなります。
4. 公式サンプルとデモを探す
DelphiVCLの良いところは、開発元が公開しているサンプルをそのまま読めることです。まずはGitHubの次のフォルダーを確認してみてください。
公式サンプル一覧:
github.com/Embarcadero/DelphiVCL4Python/tree/main…
| サンプル | 内容 | ソース |
| --- | --- | --- |
| HelloWorld | 基本的なフォームの表示 | HelloWorld |
| ActivityIndicator | アニメーション、表示サイズ、色、スタイルの変更 | ActivityIndicator |
| ListView | 項目を一覧表示するコントロール | ListView |
| TreeView | 階層構造の表示やイベント | TreeView |
| DesignExport | Delphiのフォーム設計をPython向けに出力する例 | DesignExport |
| Installer | PyInstallerを利用する配布方法 | Installer |
GUIの見た目や、コンポーネントの使い方を知りたい場合は、ActivityIndicator → ListView → TreeViewの順で見るとつかみやすいと思います。
ActivityIndicatorの実行例
公式リポジトリを取得しておけば、次のように実行できます。
# 任意の作業フォルダーで実行
git clone https://github.com/Embarcadero/DelphiVCL4Python.git
cd DelphiVCL4Python
# このリポジトリ内にも仮想環境を作成します
py -3.12 -m venv .venv
.\.venv\Scripts\python.exe -m pip install delphivcl==1.0.7
.\.venv\Scripts\python.exe .\samples\ActivityIndicator\activityindicator.py
ActivityIndicatorのサンプルでは、インジケーターの種類、サイズ、色、アニメーション速度などを切り替える処理が紹介されています。また、VCLスタイルを使った外観変更の参考にもなります。
ブラウザ上で見られる資料
Windows専用のGUIなので、公式の「ブラウザ上で直接操作できるライブデモ」は確認できませんでした。一方、画面イメージや実装例を掲載したサイトはあります。
| サイト | 主な内容 |
| --- | --- |
| 公式Quickstart | 空のフォーム、Hello World、ToDoアプリのコードと画面 |
| Embarcadero公式ブログ | GUIの表示例とVCLスタイルの紹介 |
| PythonGUI.org コンポーネント紹介 | タブ、入力欄、チェックボックスなどの実装例 |
| Embarcadero動画チュートリアル | Windows GUIの作り方を動画で紹介 |
| Delphi4PythonExporter | GUIデザイナーを使う方法 |
公式ドキュメントのExample Galleryは、確認日時点で「under construction(準備中)」と記載されています。現状はGitHubのサンプルやQuickstartが手掛かりになります。
5. サンプル:観測所を登録してCSVに保存する
今度は、もう少し実用的な画面を作ってみます。観測所名を入力して「追加」を押すと一覧に表示され、「CSV保存」を押すとファイルに書き出すアプリです。
この例で使うのは、Form、Label、Edit、Button、ListBox、SaveDialogです。CSVファイルの書き込みにはPython標準ライブラリのcsvを使います。
画面の構成
<!-- FIG02_START: images/fig02_station_form_components.png -->
!fig02_station_form_components.png
図2:観測所登録アプリのコンポーネント構成。これは画面部品の関係図であり、実行画面のスクリーンショットではありません。
Pythonコード
次の内容をstation_manager.pyとして保存します。コードが少し長いため、折りたたんでいます。
<details><summary>station_manager.py(ソースコード全体を表示)</summary>
"""DelphiVCLによる観測所登録・CSV保存サンプル。
画面の構成とイベント処理を学ぶための小さなアプリケーションです。
CSVの出力にはPython標準ライブラリを使います。
"""
import csv
from delphivcl import (
Application,
Button,
Edit,
Form,
Label,
ListBox,
SaveDialog,
)
class StationForm(Form):
"""観測所の入力、一覧表示、CSV保存を受け付けるフォーム。"""
def __init__(self, owner):
"""GUI部品を作成し、クリックイベントを登録する。"""
self.Caption = "観測所登録アプリケーション"
self.SetBounds(150, 100, 560, 420)
# 画面に表示するデータはPythonのリストでも管理する
self.station_names: list[str] = []
# 観測所名の入力
self.input_label = Label(self)
self.input_label.SetProps(
Parent=self, Caption="観測所名を入力してください"
)
self.input_label.SetBounds(20, 20, 340, 24)
self.name_edit = Edit(self)
self.name_edit.Parent = self
self.name_edit.SetBounds(20, 55, 330, 28)
# 追加ボタン
self.add_button = Button(self)
self.add_button.SetProps(Parent=self, Caption="追加")
self.add_button.SetBounds(370, 55, 140, 28)
self.add_button.OnClick = self.on_add_click
# 登録された観測所の一覧
self.station_list = ListBox(self)
self.station_list.Parent = self
self.station_list.SetBounds(20, 105, 490, 185)
# CSVへの保存ボタン
self.save_button = Button(self)
self.save_button.SetProps(Parent=self, Caption="CSV保存")
self.save_button.SetBounds(20, 310, 160, 32)
self.save_button.OnClick = self.on_save_click
# 状態表示
self.status_label = Label(self)
self.status_label.SetProps(
Parent=self, Caption="観測所名を入力して追加してください"
)
self.status_label.SetBounds(20, 355, 490, 24)
# Windows標準の保存ダイアログ
self.save_dialog = SaveDialog(self)
self.save_dialog.Filter = "CSVファイル (*.csv)|*.csv"
self.save_dialog.DefaultExt = "csv"
self.save_dialog.FileName = "stations.csv"
def on_add_click(self, sender):
"""入力された観測所名を一覧に追加する。"""
name = self.name_edit.Text.strip()
if not name:
self.status_label.Caption = "観測所名が空欄です"
return
if name in self.station_names:
self.status_label.Caption = "同じ観測所名が登録済みです"
return
self.station_names.append(name)
self.station_list.Items.Add(name)
self.name_edit.Text = ""
self.status_label.Caption = (
f"観測所を登録しました({len(self.station_names)}件)"
)
def on_save_click(self, sender):
"""保存先を選択し、登録済み観測所をCSVに書き出す。"""
if not self.station_names:
self.status_label.Caption = "保存する観測所がありません"
return
# キャンセルされたときはファイルを変更しない
if not self.save_dialog.Execute():
return
try:
# Excelからも日本語を開きやすいUTF-8 BOM付きで保存
with open(
self.save_dialog.FileName,
"w",
encoding="utf-8-sig",
newline="",
) as file:
writer = csv.writer(file)
writer.writerow(["station_name"])
for name in self.station_names:
writer.writerow([name])
except OSError as exc:
self.status_label.Caption = f"CSV保存に失敗しました: {exc}"
return
self.status_label.Caption = "CSVファイルを保存しました"
def main() -> None:
"""アプリケーションを起動する。"""
Application.Initialize()
Application.Title = "観測所登録"
form = StationForm(Application)
form.Show()
Application.Run()
form.Destroy()
if __name__ == "__main__":
main()
</details>
実行します。
.\.venv\Scripts\python.exe .\station_manager.py
このソースは、公式に公開されているForm、SetBounds、OnClick、ListBox.Items.Add、SaveDialog.ExecuteなどのAPIをもとに記述した例です。Windows実機での動作検証は本稿の作成環境では行っていません。 Pythonの構文は確認していますが、実際のGUI動作はお使いのWindows環境で確かめてください。
イベント処理の考え方
ポイントになるのは次の行です。
self.add_button.OnClick = self.on_add_click
OnClickにPythonのメソッドを設定することで、ボタンを押したときにon_add_click()が呼ばれます。GUIからPythonの処理を呼び出す、最も基本的な仕組みです。
また、フォームや各部品を作る際に出てくるOwnerとParentは別の役割を持ちます。Ownerはコンポーネントの所有や寿命管理に関係し、Parentは画面上でどの部品の内側に表示するかを指定します。
<!-- FIG03_START: images/fig03_station_registration_flow.png -->
!fig03_station_registration_flow.png
図3:入力からCSV出力までの処理。GUIのイベントとファイル操作を分離して考えると、処理を追加しやすくなります。
CSVの保存処理そのものは通常のPythonです。DelphiVCLに特殊なCSV APIが必要なわけではありません。ここではWindows版Excelで日本語を開く場合も考え、utf-8-sigで出力しています。
6. Delphiの画面デザイナーを使う方法
GUIをすべてPythonコードで配置することもできますが、ボタンや入力欄が多くなってくると、座標やサイズの管理が面倒になります。
そのような場合に利用できるのが、Delphi4PythonExporterです。
DelphiやRAD Studioのフォームデザイナーで画面を作り、Pythonで扱える形式に出力できます。現行のExporterのREADMEでは、対応する開発環境に導入したあと、Tools → Export to Pythonから出力する方法が案内されています。
ただし、フォームデザイナーを使う方法では、別途DelphiまたはRAD Studio側の環境が必要です。また、ExporterのバージョンとIDEの対応関係を確認してください。
GUIを学び始めた段階では、最初からフォームデザイナーを使うよりも、Form、Button、Edit、OnClickの関係をコードで理解した方が分かりやすいと思います。
7. PyScripterとの関係
PyScripterもDelphi系の技術を利用しているPython向けIDEですが、DelphiVCLとは役割が違います。
| 項目 | PyScripter | DelphiVCL |
| --- | --- | --- |
| 位置付け | Pythonの統合開発環境(IDE) | PythonのGUIモジュール |
| 主な用途 | 編集、実行、デバッグ | ウィンドウや部品の作成 |
| 使い方 | 開発ツールとして起動 | Pythonからimportする |
| 一緒に使えるか | はい | はい |
公式のActivityIndicatorサンプル説明にも、PyScripterでソースを開いて実行する手順が記載されています。
PyScripterに限らず、VS Codeなどでコードを書いてPowerShellから実行することもできます。DelphiVCLを使うために特定のPython IDEを導入する必要はありません。
8. CSV・DuckDB・WSL2との組み合わせ
実際の業務ツールで考えると、GUIの部分とデータ処理の部分は分けておく方が扱いやすくなります。
例えば、Windows側でDelphiVCLの画面を動かし、CSVやDuckDBの検索をPythonで行う構成です。さらに、大きな処理だけをWSL2 UbuntuやDockerで実行し、結果をWindows側へ返す方法も考えられます。
<!-- FIG04_START: images/fig04_windows_wsl2_backend.png -->
!fig04_windows_wsl2_backend.png
図4:WindowsのGUIとWSL2/Docker上の処理を分担する構成例。DelphiVCLそのものをLinuxで実行する図ではありません。
この構成で重要なのは、DelphiVCLを動かすPythonはWindows側に置くことです。DelphiVCLはWindows向けのネイティブモジュールなので、WSL2のLinux版Pythonにpip installしても同じようには使えません。
大量のデータ処理をボタンのクリックイベント内で同期的に実行すると、画面が応答しなくなる場合があります。重い処理は別プロセスやワーカーに分け、画面の更新はGUIスレッドで行う設計にしておく方が安全です。
9. 作成したアプリをEXEとして配布するには
PythonスクリプトをEXE形式にする候補として、PyInstallerがあります。DelphiVCLの公式サンプルにも、Installerが用意されています。
.\.venv\Scripts\python.exe -m pip install pyinstaller
.\.venv\Scripts\python.exe -m PyInstaller --onedir --name StationManager station_manager.py
ただし、上のコマンドだけで、必ず配布可能なEXEが完成するとは限りません。DelphiVCLにはPython拡張モジュール以外のネイティブファイルも関係するためです。
公式Installerサンプルでは、PyInstallerの.specファイルにDelphiVCLのディレクトリをdatasとして追加する例が示されています。まず--onedir形式で必要ファイルの同梱を確認し、Pythonをインストールしていない別のWindows環境で起動テストするのがよいでしょう。
なお、再配布についてはライセンスの確認も必要です。公式READMEでは、配布用ライブラリはEmbarcadero Freeware License、ソースコードはMIT Licenseと案内されています。EXEやインストーラーを公開する前に条件を確認してください。
10. 他のPython GUIライブラリとの違い
DelphiVCLが常に最適というわけではありません。用途によって適したライブラリは変わります。
| ライブラリ | 主な対象 | 特徴 |
| --- | --- | --- |
| DelphiVCL | Windows | DelphiのVCLをPythonから使える |
| DelphiFMX | Windows、macOS、Linuxなど | FireMonkeyを使う別モジュール |
| Tkinter | Windows、macOS、Linux | 標準ライブラリに含まれるGUI |
| PySide6 | Windows、macOS、Linux | Qtの豊富なウィジェットや開発機能 |
| wxPython | Windows、macOS、Linux | 各OSに合わせたGUIコントロール |
Windows専用の業務ツールを短期間で作りたいなら、DelphiVCLは検討する価値があります。一方、LinuxやmacOSでも同じGUIを使う予定がある場合は、初めからPySide6などと比較した方がよいでしょう。
11. 試すときにつまずきやすい点
No matching distribution foundと表示される
PythonのバージョンやOS、アーキテクチャが配布wheelと合っていない可能性があります。まずpython --versionと32bit/64bitを確認してください。特に、WSL2上のLinux版Pythonから導入しようとしていないかを確認します。
ウィンドウが表示されない
Application.Initialize()、フォームの作成、Show()、Application.Run()の順序を確認します。エラーを調べている間はFreeConsole()を使わず、PowerShellから実行する方が状況を把握しやすくなります。
GUIが操作できなくなる
イベント処理で長時間の計算やネットワークアクセスを待っていないか確認します。処理を非同期化する場合も、GUI部品をワーカー側から直接書き換えないようにします。
見た目だけでは使い勝手が決まらない
VCL Stylesで見た目を変更することはできますが、文字の大きさ、HiDPI、キーボード操作、表の表示速度なども重要です。特に多件数データを扱う場合は、データベースで絞り込んでから画面に渡す構成にします。
おわりに
DelphiVCLは、PythonからWindowsネイティブのGUIを作れる少し珍しい選択肢です。難しい仕組みを理解する前に、まず公式Quickstartのウィンドウを表示し、ActivityIndicatorやListViewのサンプルを動かしてみるのがよいと思います。
フォーム、入力欄、ボタン、イベント処理の関係が分かれば、CSVの変換ツールやデータベースの検索画面にも応用できます。データ処理をPython側に残せるため、今あるPythonのスクリプトにWindows向けの操作画面を付けたい場合にも使いやすい構成です。
一方で、DelphiVCLはWindows専用です。クロスプラットフォーム対応を考える場合は、この点を最初に判断しておく必要があります。
参考資料
- Embarcadero / DelphiVCL4Python(公式GitHub)
- DelphiVCL公式ドキュメント
- DelphiVCL Quickstart
- 公式サンプル集
- PyPI / delphivcl
- Delphi4PythonExporter
- PythonGUI.org / DelphiVCLコンポーネント紹介
- Qiita公式 / Mermaidの利用方法
<!--
Qiita投稿用メモ(公開時は削除可)
記事タイトル:PythonからDelphiのWindows GUIを使う ― DelphiVCLの基本・公式サンプル・アプリ作成
推奨タグ:Python, Delphi, GUI, Windows, VCL
確認日:2026-10-27
図の差し替え一覧:
図1 images/fig01_delphivcl_architecture.png PythonとVCLの関係
図2 images/fig02_station_form_components.png 観測所登録GUIの画面構成
図3 images/fig03_station_registration_flow.png 入力・登録・CSV保存の流れ
図4 images/fig04_windows_wsl2_backend.png Windows GUIとWSL2/Dockerの分担
現時点ではMermaid図を本文に掲載しています。画像ファイルは同梱していません。
画像を作成したら、各 FIGxx_START ~ FIGxx_END の間にあるMermaidコードブロックを
次の画像記法に置き換えてください。図番号とキャプションはそのまま残せます。

上記images/以下の名称は画像作成時の管理名で、実際のローカルパスではありません。
-->
1 like
Mentions
DelphiFMX for Python入門 ― FireMonkeyで作るクロスプラットフォームGUI DelphiFMX for Python入門 ― FireMonkeyで作るクロスプラットフォームGUI <!-- Qiita推奨タグ:Python Delphi FireMonkey GUI クロスプラットフォーム --> <!-- Qiita投稿用メモ(公開時はこのコメントを削除して構いません) タイトル案:DelphiFMX for Python入門 ― FireMonkeyで作るクロスプラットフォームGUI 推奨タグ(5個):Python, Delphi, FireMonkey, GUI, クロスプラットフォーム 確認日:2026-10-27 本文中のPythonコードは公式QuickstartとサンプルのAPIに沿った説明用コードです。 実機でのGUI起動・各OSでの動作検証は行っていません。 図の差し替え一覧: 図1 images/fig01_delphifmx_architecture.png Python・Python4Delphi・FireMonkeyの関係 図2 images/fig02_form_and_events.png フォームとイベントの流れ 図3 images/fig03_fmx_exporter_workflow.png DelphiのGUIデザイナーとExporter 図4 images/fig04_data_app_architecture.png データ解析GUIの応用構成 --> Pythonでデスクトップアプリケーションを作る場合、TkinterやPySide6、PyQtなどを使う方法がよく知られています。これらに加えて、DelphiのGUIフレームワークをPythonから利用する方法もあります。それが DelphiFMX for Python です。 Delphiと聞くとObject Pascalで開発するイメージが強いかもしれませんが、DelphiFMXでは画面の作成やイベント処理をPythonで記述できます。Windowsだけでなく、LinuxやmacOSも対象にできる点が、Windows専用のDelphiVCLとの大きな違いです。 この記事では、DelphiFMXの仕組みから環境構築、簡単なGUIプログラム、公開サンプル、実務で使う際の注意点まで整理します。後半では、Pythonによるデータ処理と組み合わせる構成も考えてみます。 > 確認したバージョンと範囲 > 2026年10月27日に確認したPyPIの最新版は DelphiFMX 1.1.0(2025年3月31日公開) です。この記事のコードは公式ドキュメントにあるAPIの使い方に基づいていますが、筆者の環境ですべてのスクリプトの実行確認した結果ではありません。OSごとのGUIランタイムや配布方法については、実際の導入環境で確認してください。 1. DelphiFMXとは DelphiFMXは、Embarcaderoが公開しているPython向けGUIモジュールです。delphifmx という名前でPyPIに登録されており、次のコマンドで導入できます。 python -m pip install delphifmx 内部では、Delphi向けの FireMonkey(FMX) というGUIフレームワークを利用します。PythonとDelphiの橋渡しには Python4Delphi の技術が使われています。 FireMonkeyは、クロスプラットフォーム向けに設計されたGUIフレームワークです。フォーム、ボタン、入力欄、表などの部品を扱えるほか、スタイルによる見た目の変更にも対応しています。描画には環境に応じてGPUアクセラレーションを利用できます。 ここでいうGPUの利用は画面描画の話です。NumPyや数値シミュレーションの計算が、DelphiFMXを入れただけでGPU処理になるわけではありません。 !fig01_delphifmx_architecture.png 図1 PythonからFireMonkeyを利用する仕組み。Androidへの配布には別途ビルド工程が必要です。 DelphiやObject Pascalを使った経験がなくても、Pythonコードからフォームや部品を操作できるのが特徴です。ビジュアルデザイナーを使いたい場合は、後述する追加ツールを利用します。 公式サイトとソースコードは次の場所に公開されています。 - DelphiFMX4Python(公式GitHub) - DelphiFMX公式ドキュメント - delphifmx(PyPI) 2. 対応OSとPythonバージョン 公開されている対応範囲は次のとおりです。 | 環境 | 状況 | 備考 | | --- | --- | --- | | Windows(32bit・64bit) | 対応 | デスクトップGUIを直接実行できます | | Linux(x86_64) | 対応 | GUI表示に必要な環境の準備が必要です | | macOS(Intel) | 対応 | 対応するwheelを利用します | | macOS(Apple Silicon) | 対応 | ARM64向けwheelが配布されています | | Android(ARM64) | 専用ツールで対応 | PythonFMXBuilderによるアプリ化が必要です | | iOS | 対応を確認できず | FireMonkey本体の対応範囲とは区別してください | 公式GitHubのREADMEでは、CPython 3.8~3.13 がサポート対象として案内されています。PyPIにもPython 3.12および3.13向けのOS別wheelが登録されています。一方、古い公式Installationページでは3.6~3.11と記載されているため、バージョン選定では現在配布されているwheelを確認するのが確実です。 Python 3.14以降については、この記事で対応を確認していません。 > 補足 > Python向けのDelphiFMXが動作するOSと、Delphi製品のFireMonkeyそのものが対応するOSは、必ずしも一致しません。また、各プラットフォームで同じ画面表示になることや、追加設定なしに動作することを保証するものではありません。 3. インストールする まずはWindows上で起動を確認するのが分かりやすいと思います。その後、Linuxなど別の環境へ広げると問題を切り分けやすくなります。 3.1 Windows 11 PowerShellでPython 3.12の仮想環境を作成します。 # Python 3.12で仮想環境を作成 py -3.12 -m venv .venv # 仮想環境を有効化 .\.venv\Scripts\Activate.ps1 # pipを更新してDelphiFMXを導入 python -m pip install --upgrade pip python -m pip install delphifmx==1.1.0 # Pythonから読み込めるか確認 python -c "import delphifmx; print('DelphiFMX OK')" DelphiFMX OK と表示されれば、少なくともモジュールの読み込みは成功しています。GUIの表示まで確認できたわけではないので、後述のサンプルも動かしてみます。 3.2 Ubuntu 24.04 / WSL2 Ubuntu 24.04の標準Pythonは3.12系です。仮想環境を作り、Windowsの場合と同様にインストールします。 sudo apt update sudo apt install -y python3 python3-venv python3-pip mkdir -p ~/delphifmx-demo cd ~/delphifmx-demo python3 -m venv .venv source .venv/bin/activate python -m pip install --upgrade pip python -m pip install delphifmx==1.1.0 python -c "import delphifmx; print('DelphiFMX OK')" LinuxでGUIを表示するには、ディスプレイサーバーや描画用ランタイムが必要です。Windows 11のWSL2でGUIアプリケーションを動かす場合はWSLgを使えますが、DelphiFMX固有の依存ライブラリについても動作環境に応じて確認してください。 Dockerコンテナに入れて使う場合も同様です。pip install だけでは画面は表示されません。ディスプレイの接続、OpenGL関連のライブラリ、フォントなどの扱いを別途設計する必要があります。 4. 最初のGUIアプリケーション インストールできたら、ウィンドウを1枚表示してみます。次の内容を hello_fmx.py として保存します。 """DelphiFMXでウィンドウを表示する最小サンプル。""" from delphifmx import Application, Form def main() -> None: """GUIアプリケーションを起動する。""" Application.Initialize() Application.Title = "Hello DelphiFMX" # メインウィンドウを作成 window = Form(Application) window.SetProps(Caption="Hello DelphiFMX") window.SetBounds(100, 100, 600, 360) Application.MainForm = window # ウィンドウを表示し、操作を受け付ける window.Show() try: Application.Run() finally: window.Destroy() if __name__ == "__main__": main() 起動方法は通常のPythonスクリプトと同じです。 python hello_fmx.py Application.Initialize() はアプリケーションを初期化し、Form(Application) でフォームを作成します。Application.MainForm に登録してから Show() で表示し、Application.Run() でイベントループを開始します。ウィンドウを閉じてイベントループが終わった後は、Destroy() でフォームを破棄します。 SetBounds(100, 100, 600, 360) は、左上の位置と幅・高さを指定するためのメソッドです。 5. ボタンとイベント処理 もう少しGUIらしい例として、ボタンを押すたびにカウンターが増えるアプリケーションを作ります。使用する部品は Form、Label、Button の3つだけです。 !fig02_form_and_events.png 図2 フォームに部品を配置し、クリックイベントで表示を更新する流れ。 counter_fmx.py として保存するコードを示します。 """DelphiFMXのボタンイベントを確認するサンプル。""" from delphifmx import Application, Button, Form, Label def main() -> None: """フォームとイベントハンドラーを作成する。""" Application.Initialize() Application.Title = "FMX Counter" form = Form(Application) form.SetProps(Caption="DelphiFMX Counter") form.SetBounds(100, 100, 420, 250) # 表示用ラベルをフォーム上に配置 label = Label(form) label.SetProps(Parent=form, Text="カウント: 0") label.SetBounds(40, 35, 250, 40) # クリック用ボタンを配置 button = Button(form) button.SetProps(Parent=form, Text="カウントを増やす") button.SetBounds(40, 95, 180, 44) count = 0 def on_click(sender: object) -> None: """クリック時にカウントと表示文字列を更新する。""" nonlocal count count += 1 label.Text = f"カウント: {count}" # FireMonkeyのクリックイベントへPython関数を登録 button.OnClick = on_click Application.MainForm = form form.Show() try: Application.Run() finally: form.Destroy() if __name__ == "__main__": main() ポイントは、次の1行です。 button.OnClick = on_click FireMonkeyのイベントにPythonの関数を登録しています。クリックされると、その関数が呼ばれ、Label.Text の文字列を更新します。DelphiFMXではGUI部品の作成だけでなく、操作後の処理もPythonで記述できます。 この例は公式Quickstartで紹介されているイベント登録の方法を基にした説明用コードです。Python構文は確認していますが、実際のGUI描画やイベントの動作は実機未検証です。 6. どのようなGUI部品があるのか FireMonkeyには、一般的な業務アプリケーションでよく使う部品が用意されています。ここでは代表的なものを挙げます。 | 部品 | 用途 | | --- | --- | | Form | ウィンドウ | | Label | 文字や数値の表示 | | Button | ボタン操作 | | Edit / Memo | 文字入力 | | CheckBox / RadioButton | 項目の選択 | | ComboBox / ListBox | 選択肢や一覧の表示 | | Grid / StringGrid | 表形式のデータ表示 | | ProgressBar | 処理の進捗表示 | | TabControl | タブによる画面切り替え | | Image | 画像表示 | | Layout / GridLayout | 部品の配置 | | StyleBook | 外観スタイルの管理 | | OpenDialog | ファイルを開くためのダイアログ | 部品には、表示文字列、位置、サイズなどのプロパティがあり、必要に応じてイベントを設定します。フォーム上に部品を置くだけでなく、親子関係やレイアウトを整理しておくと、画面が複雑になったときにも管理しやすくなります。 使えるクラスやプロパティは公式APIリファレンスで確認できます。 7. サンプルとデモを探す 公式GitHubには、実際に動かして読み進められるサンプルがあります。最初は次の2つを見るとよいでしょう。 - Simplest.py:ウィンドウとラベルを表示する基本例 - ToDoList.py:入力欄、ボタン、一覧を使う例 リポジトリをまとめて取得するには、次のように実行します。 git clone https://github.com/Embarcadero/DelphiFMX4Python.git cd DelphiFMX4Python # インストール済みのPython環境で実行 python samples/Simplest.py python samples/ToDoList.py 公式にはQuickstartもあり、基本的なフォームからToDoアプリまで段階的に説明されています。なお、Example Galleryは確認時点では整備中と案内されています。 DelphiFMXはWebブラウザ上で実行するライブラリではありません。そのため、公開デモサイトを探すより、まずローカル環境でサンプルを実行してGUIの表示を確かめる方がよいと思います。 8. GUIデザイナーも利用できる ここまでの例では、画面上の部品をすべてPythonコードから作成しました。DelphiまたはRAD Studioのビジュアルデザイナーを使ってフォームを作りたい場合は、Delphi4PythonExporter という追加ツールも利用できます。 フォーム上にボタンや入力欄を配置してからPython向けにエクスポートし、その画面をPythonから使う流れです。 !fig03_fmx_exporter_workflow.png 図3 Delphiのデザイナーで作成したフォームをPythonから利用する構成。 公式READMEでは、RAD Studio 13 FlorenceなどでExporterを導入し、フォームを作成してから Tools → Export to Python を選ぶ方法が説明されています。ExporterはDelphi/RAD Studio側で使うツールなので、対応IDEとライセンスについては別途確認する必要があります。 一方、Pythonコードだけでフォームを作る使い方であれば、Delphi IDEを導入する必要はありません。 - Delphi4PythonExporter(公式GitHub) 9. Androidアプリにする場合 DelphiFMXはAndroidも対象としていますが、WindowsやLinuxのようにPythonスクリプトをそのまま起動する方法とは異なります。 Android向けには、PythonFMXBuilder という専用ツールが用意されています。PythonスクリプトをAndroidアプリに組み込み、端末へのインストールや配布ができる形式へまとめます。 ただし、Android SDKやJDKなどの準備が必要です。動作環境、パッケージ化の条件、最新のビルダーの制約は事前に確認してください。 - PythonFMXBuilder(公式GitHub) 10. DelphiVCLやPySide6との違い PythonでGUIを作る場合、DelphiFMX以外にも有力な選択肢があります。何を作るかによって、使い分けが変わります。 | 比較項目 | DelphiVCL | DelphiFMX | PySide6 | | --- | --- | --- | --- | | GUIの基盤 | VCL | FireMonkey | Qt | | Windows | 対応 | 対応 | 対応 | | Linux | 非対応 | 対応 | 対応 | | macOS | 非対応 | 対応 | 対応 | | Android | 非対応 | 専用ツールで対応 | 専用の展開・配布工程が必要 | | GUIの外観 | Windowsらしい部品 | FMXのスタイル | Qtのスタイル | | 画面設計 | Delphi系ツール | Delphi系ツール | Qt Designer等 | | 主な用途 | Windows業務GUI | 複数OS向けGUI | 幅広いデスクトップGUI | Windows専用で従来の業務アプリらしい外観を重視するならDelphiVCL、複数OSを対象にFireMonkeyのスタイルを使いたいならDelphiFMXが候補になります。PySide6はQtのコンポーネントや開発ツールを使えるので、機能の多いアプリケーションを作る場合には比較しておきたいところです。 実際には、表の表示速度、データ件数が増えたときの応答、配布ファイルの作りやすさなども選定に影響します。小さな試作を同じ機能で作って比べると判断しやすくなります。 11. データ処理用のGUIとして使う DelphiFMXは、データを計算するためのライブラリではなく、計算結果を操作・表示するためのGUIです。この役割分担を意識すると、Pythonの既存ライブラリと組み合わせやすくなります。 例えば、AMeDASの降水量や河川水位のデータを取得し、DuckDBに保存した後、GUIで期間や地点を選んで確認するアプリケーションを考えてみます。 !fig04_data_app_architecture.png 図4 データ取得・保存・解析をPythonに任せ、画面操作をDelphiFMXが担当する構成。 この構成では、GUIは入力条件の指定や結果表示を担当し、データ取得・解析処理は別のPythonモジュールに分けます。計算処理の部分をGUIから切り離しておくと、後からCLI実行やバッチ処理に流用しやすくなります。 グラフについては、例えばMatplotlibでPNGを作成し、FMXの画像表示部品に読み込ませる方法が考えられます。ただし、Matplotlibの対話的な描画ウィジェットをそのまま埋め込めるわけではありません。画面内でズームや再描画をしたい場合は、そのための実装を追加する必要があります。 また、OpenLayersなどのWeb GISを利用したい場合は、デスクトップGUIへの埋め込みを前提にせず、ブラウザ側に地図表示を分離する構成も候補になります。 12. 実務で利用する前に確認したいこと まず試したいのは、OSごとに最小ウィンドウが正しく表示されるかどうかです。特にLinuxやWSL2では、Pythonパッケージ以外のGUI関連ライブラリが必要になる場合があります。 次に、長い時間がかかる処理の扱いです。GUIのイベント処理と同じスレッドで大量のデータ取得や数値計算を実行すると、画面が固まって見えることがあります。必要に応じてワーカースレッドや別プロセスに分け、GUIの更新は適切なスレッドから行う設計にします。 配布方法も早めに確認しておくと安心です。Pythonコードだけでなく、ネイティブの実行ライブラリやPythonのランタイム、環境によっては追加の共有ライブラリも必要になります。Windowsで動いたアプリをそのままLinuxにコピーして動かせるとは限りません。 ライセンスにも注意してください。公式READMEでは、再配布ライブラリにはEmbarcadero Freeware License、ソースコードにはMITライセンスが適用されると説明されています。商用利用や再配布の際は、実際に同梱するファイルと適用条件を確認してください。「無料でインストールできる」ことと、すべての配布形態が無条件で許可されることは同じではありません。 まとめ DelphiFMXを使うと、PythonからFireMonkeyのフォームやGUI部品を操作できます。Windowsに加えてLinuxやmacOSを対象にできること、Pythonのデータ処理をそのまま利用できることが特徴です。 一方で、LinuxのGUIランタイムやアプリケーションの配布方法、Android向けのビルド工程などは、最小サンプルを動かしただけでは確認できません。実際の業務アプリケーションに採用する場合は、こうした点も含めて検証する必要があります。 最初は今回の最小フォームとカウンターアプリを試し、その次にCSVの読み込み、表の表示、ファイル出力へ進むとよいと思います。同じ機能をPySide6などで実装して比較すると、開発しやすさや使い勝手の違いも見えてきます。 次は、簡単なプログラムを作成して、機能を拡張していきたいと考えています。 参考資料 - Embarcadero / DelphiFMX4Python(GitHub) - DelphiFMX Documentation(公式ドキュメント) - DelphiFMX Quickstart(基本コード) - DelphiFMX API Reference(クラス・プロパティ) - delphifmx(PyPI・配布バージョン) - Embarcadero / Delphi4PythonExporter(GitHub) - Embarcadero / PythonFMXBuilder(GitHub) ---
PythonからDelphiのWindows GUIを使う ― DelphiVCLの基本・公式サンプル・アプリ作成 PythonからDelphiのWindows GUIを使う ― DelphiVCLの基本・公式サンプル・アプリ作成 はじめに PythonでWindows向けのデスクトップアプリを作ろうとすると、まずTkinterやPySide6などが候補に挙がります。もう一つ覚えておきたいのが、DelphiVCL for Python です。 DelphiVCLは、Delphiで長く使われてきたGUIフレームワーク「VCL(Visual Component Library)」をPythonから利用できるようにしたモジュールです。Windowsの標準的な操作感を持つウィンドウを作り、ボタンを押したらPythonの関数を呼び出す、といったプログラムを書けます。 本記事では、DelphiVCLの仕組みを確認したあと、公式サンプルとデモの場所、インストール方法、簡単なGUIアプリの作成まで進めます。後半では、CSVやデータベースを使う業務ツールへの応用も考えてみます。 なお、DelphiVCLはWindows専用です。Linuxで動くPython GUIライブラリではない点には注意してください。 > 確認日:2026年10月27日 > PyPIで確認できるdelphivclの公開版は1.0.7(2025年3月31日公開)です。パッケージの配布状況は変更されることがあるため、導入時はPyPIでも確認してください。 1. DelphiVCLとは DelphiのGUIをPythonから利用する Delphiでは、フォームにボタンや入力欄を配置し、操作に応じて処理を実行するWindowsアプリを開発できます。DelphiVCLを使うと、そのVCLのコンポーネントをPythonから扱えます。 例えば次のような部品が利用できます。 | コンポーネント | 役割 | 使用例 | | --- | --- | --- | | Form | ウィンドウ | メイン画面 | | Label | 文字表示 | 項目名、説明 | | Edit | 1行入力 | 検索条件、観測所名 | | Button | ボタン | 実行、登録、保存 | | ListBox | リスト表示 | ファイル、地点の一覧 | | ComboBox | 選択欄 | 対象地点や処理方式の切り替え | | CheckBox | チェック欄 | オプション指定 | | PageControl | タブ画面 | 設定画面の分類 | | TreeView | 階層表示 | データフォルダー、プロジェクト構成 | | StringGrid | 表形式の表示 | 検索結果や時系列データ | | OpenDialog / SaveDialog | ファイル選択 | CSVの読み込みと保存 | | StatusBar | 状態表示 | 処理件数、メッセージ | ここに挙げたものは、DelphiVCLのAPIリファレンスに掲載されているコンポーネントの一部です。Delphi本体にある全コンポーネントや市販のVCLコンポーネントが、Pythonから無条件に使えるわけではありません。 Python4Delphiとの違い DelphiVCLの内部では、DelphiとPythonを橋渡しする Python4Delphi が使われています。ここは名前が似ていて混同しやすい部分です。 - DelphiVCL:PythonからWindows向けのVCLコンポーネントを使うためのモジュールです。 - Python4Delphi:DelphiとPythonを連携させるための基盤です。Delphi側からPythonを呼び出す用途も含みます。 - DelphiFMX:FireMonkey(FMX)を使った、複数OS向けGUIの別モジュールです。 - Delphi4PythonExporter:Delphiのフォームデザイナーで作った画面を、Python向けに出力するツールです。 DelphiVCLで簡単な画面を作るだけなら、Delphi IDEを別途導入する必要はありません。Pythonコードでフォームやボタンの配置を記述できます。 <!-- FIG01_START: images/fig01_delphivcl_architecture.png --> !fig01_delphivcl_architecture.png 図1:DelphiVCLの位置付け。PythonからDelphiのVCLを経由し、WindowsのGUIを利用します。 2. 動作環境とインストール 対応環境 現在配布されているパッケージの主な対象は次のとおりです。 | 項目 | 内容 | | --- | --- | | OS | Windows | | CPUアーキテクチャ | x86(32bit)/ x86-64(64bit) | | Python | CPython 3.8~3.13に対応するwheelが公開されています | | インストール方法 | pip(venv、conda環境でも利用可能) | | Delphi IDE | PythonコードによるGUI開発だけなら不要 | 公式ドキュメントの一部には、以前のPython対応範囲が残っています。ここでは2026年10月27日時点でPyPIに掲載されているwheelの情報を基準にしています。 Windows 11では、まず64bit版Python 3.12で試すとよいでしょう。以下はWindows PowerShellで実行します。WSL2のUbuntuターミナルではありません。 # 作業フォルダー mkdir delphivcl_test cd delphivcl_test # Python 3.12を利用する仮想環境 py -3.12 -m venv .venv # PowerShellの実行ポリシーを変更せずに、仮想環境内のPythonを直接使用 .\.venv\Scripts\python.exe -m pip install --upgrade pip .\.venv\Scripts\python.exe -m pip install delphivcl==1.0.7 # インポートを確認 .\.venv\Scripts\python.exe -c "from delphivcl import Form, Button; print(Form, Button)" エラーになった場合は、利用中のPythonのバージョンと32bit/64bitの組み合わせを確認してください。 .\.venv\Scripts\python.exe --version .\.venv\Scripts\python.exe -c "import platform; print(platform.architecture())" 3. まずは最小のウィンドウを表示する 最初はボタンも入力欄もないウィンドウを作ります。公式Quickstartと同じ基本的な流れです。 """DelphiVCLで空のWindowsフォームを表示する最小サンプル。""" from delphivcl import Application, Form def main() -> None: """VCLの初期化、フォームの表示、終了処理を行う。""" Application.Initialize() Application.Title = "DelphiVCL Sample" form = Form(Application) form.Caption = "Hello DelphiVCL" form.SetBounds(150, 100, 520, 320) form.Show() # ウィンドウが閉じられるまでGUIイベントを処理する Application.Run() form.Destroy() if __name__ == "__main__": main() 実行コマンドは次のとおりです。 .\.venv\Scripts\python.exe .\hello_vcl.py Application.Initialize()でアプリケーションを初期化し、Form(Application)でウィンドウを作成しています。Application.Run()はWindowsのイベントを処理するメッセージループです。ウィンドウが閉じられると、後続の終了処理に進みます。 公式QuickstartにはFreeConsole()を使う例もありますが、最初の動作確認では付けない方が、標準出力や例外を確認しやすくなります。 4. 公式サンプルとデモを探す DelphiVCLの良いところは、開発元が公開しているサンプルをそのまま読めることです。まずはGitHubの次のフォルダーを確認してみてください。 公式サンプル一覧: github.com/Embarcadero/DelphiVCL4Python/tree/main… | サンプル | 内容 | ソース | | --- | --- | --- | | HelloWorld | 基本的なフォームの表示 | HelloWorld | | ActivityIndicator | アニメーション、表示サイズ、色、スタイルの変更 | ActivityIndicator | | ListView | 項目を一覧表示するコントロール | ListView | | TreeView | 階層構造の表示やイベント | TreeView | | DesignExport | Delphiのフォーム設計をPython向けに出力する例 | DesignExport | | Installer | PyInstallerを利用する配布方法 | Installer | GUIの見た目や、コンポーネントの使い方を知りたい場合は、ActivityIndicator → ListView → TreeViewの順で見るとつかみやすいと思います。 ActivityIndicatorの実行例 公式リポジトリを取得しておけば、次のように実行できます。 # 任意の作業フォルダーで実行 git clone https://github.com/Embarcadero/DelphiVCL4Python.git cd DelphiVCL4Python # このリポジトリ内にも仮想環境を作成します py -3.12 -m venv .venv .\.venv\Scripts\python.exe -m pip install delphivcl==1.0.7 .\.venv\Scripts\python.exe .\samples\ActivityIndicator\activityindicator.py ActivityIndicatorのサンプルでは、インジケーターの種類、サイズ、色、アニメーション速度などを切り替える処理が紹介されています。また、VCLスタイルを使った外観変更の参考にもなります。 ブラウザ上で見られる資料 Windows専用のGUIなので、公式の「ブラウザ上で直接操作できるライブデモ」は確認できませんでした。一方、画面イメージや実装例を掲載したサイトはあります。 | サイト | 主な内容 | | --- | --- | | 公式Quickstart | 空のフォーム、Hello World、ToDoアプリのコードと画面 | | Embarcadero公式ブログ | GUIの表示例とVCLスタイルの紹介 | | PythonGUI.org コンポーネント紹介 | タブ、入力欄、チェックボックスなどの実装例 | | Embarcadero動画チュートリアル | Windows GUIの作り方を動画で紹介 | | Delphi4PythonExporter | GUIデザイナーを使う方法 | 公式ドキュメントのExample Galleryは、確認日時点で「under construction(準備中)」と記載されています。現状はGitHubのサンプルやQuickstartが手掛かりになります。 5. サンプル:観測所を登録してCSVに保存する 今度は、もう少し実用的な画面を作ってみます。観測所名を入力して「追加」を押すと一覧に表示され、「CSV保存」を押すとファイルに書き出すアプリです。 この例で使うのは、Form、Label、Edit、Button、ListBox、SaveDialogです。CSVファイルの書き込みにはPython標準ライブラリのcsvを使います。 画面の構成 <!-- FIG02_START: images/fig02_station_form_components.png --> !fig02_station_form_components.png 図2:観測所登録アプリのコンポーネント構成。これは画面部品の関係図であり、実行画面のスクリーンショットではありません。 Pythonコード 次の内容をstation_manager.pyとして保存します。コードが少し長いため、折りたたんでいます。 <details><summary>station_manager.py(ソースコード全体を表示)</summary> """DelphiVCLによる観測所登録・CSV保存サンプル。 画面の構成とイベント処理を学ぶための小さなアプリケーションです。 CSVの出力にはPython標準ライブラリを使います。 """ import csv from delphivcl import ( Application, Button, Edit, Form, Label, ListBox, SaveDialog, ) class StationForm(Form): """観測所の入力、一覧表示、CSV保存を受け付けるフォーム。""" def __init__(self, owner): """GUI部品を作成し、クリックイベントを登録する。""" self.Caption = "観測所登録アプリケーション" self.SetBounds(150, 100, 560, 420) # 画面に表示するデータはPythonのリストでも管理する self.station_names: list[str] = [] # 観測所名の入力 self.input_label = Label(self) self.input_label.SetProps( Parent=self, Caption="観測所名を入力してください" ) self.input_label.SetBounds(20, 20, 340, 24) self.name_edit = Edit(self) self.name_edit.Parent = self self.name_edit.SetBounds(20, 55, 330, 28) # 追加ボタン self.add_button = Button(self) self.add_button.SetProps(Parent=self, Caption="追加") self.add_button.SetBounds(370, 55, 140, 28) self.add_button.OnClick = self.on_add_click # 登録された観測所の一覧 self.station_list = ListBox(self) self.station_list.Parent = self self.station_list.SetBounds(20, 105, 490, 185) # CSVへの保存ボタン self.save_button = Button(self) self.save_button.SetProps(Parent=self, Caption="CSV保存") self.save_button.SetBounds(20, 310, 160, 32) self.save_button.OnClick = self.on_save_click # 状態表示 self.status_label = Label(self) self.status_label.SetProps( Parent=self, Caption="観測所名を入力して追加してください" ) self.status_label.SetBounds(20, 355, 490, 24) # Windows標準の保存ダイアログ self.save_dialog = SaveDialog(self) self.save_dialog.Filter = "CSVファイル (*.csv)|*.csv" self.save_dialog.DefaultExt = "csv" self.save_dialog.FileName = "stations.csv" def on_add_click(self, sender): """入力された観測所名を一覧に追加する。""" name = self.name_edit.Text.strip() if not name: self.status_label.Caption = "観測所名が空欄です" return if name in self.station_names: self.status_label.Caption = "同じ観測所名が登録済みです" return self.station_names.append(name) self.station_list.Items.Add(name) self.name_edit.Text = "" self.status_label.Caption = ( f"観測所を登録しました({len(self.station_names)}件)" ) def on_save_click(self, sender): """保存先を選択し、登録済み観測所をCSVに書き出す。""" if not self.station_names: self.status_label.Caption = "保存する観測所がありません" return # キャンセルされたときはファイルを変更しない if not self.save_dialog.Execute(): return try: # Excelからも日本語を開きやすいUTF-8 BOM付きで保存 with open( self.save_dialog.FileName, "w", encoding="utf-8-sig", newline="", ) as file: writer = csv.writer(file) writer.writerow(["station_name"]) for name in self.station_names: writer.writerow([name]) except OSError as exc: self.status_label.Caption = f"CSV保存に失敗しました: {exc}" return self.status_label.Caption = "CSVファイルを保存しました" def main() -> None: """アプリケーションを起動する。""" Application.Initialize() Application.Title = "観測所登録" form = StationForm(Application) form.Show() Application.Run() form.Destroy() if __name__ == "__main__": main() </details> 実行します。 .\.venv\Scripts\python.exe .\station_manager.py このソースは、公式に公開されているForm、SetBounds、OnClick、ListBox.Items.Add、SaveDialog.ExecuteなどのAPIをもとに記述した例です。Windows実機での動作検証は本稿の作成環境では行っていません。 Pythonの構文は確認していますが、実際のGUI動作はお使いのWindows環境で確かめてください。 イベント処理の考え方 ポイントになるのは次の行です。 self.add_button.OnClick = self.on_add_click OnClickにPythonのメソッドを設定することで、ボタンを押したときにon_add_click()が呼ばれます。GUIからPythonの処理を呼び出す、最も基本的な仕組みです。 また、フォームや各部品を作る際に出てくるOwnerとParentは別の役割を持ちます。Ownerはコンポーネントの所有や寿命管理に関係し、Parentは画面上でどの部品の内側に表示するかを指定します。 <!-- FIG03_START: images/fig03_station_registration_flow.png --> !fig03_station_registration_flow.png 図3:入力からCSV出力までの処理。GUIのイベントとファイル操作を分離して考えると、処理を追加しやすくなります。 CSVの保存処理そのものは通常のPythonです。DelphiVCLに特殊なCSV APIが必要なわけではありません。ここではWindows版Excelで日本語を開く場合も考え、utf-8-sigで出力しています。 6. Delphiの画面デザイナーを使う方法 GUIをすべてPythonコードで配置することもできますが、ボタンや入力欄が多くなってくると、座標やサイズの管理が面倒になります。 そのような場合に利用できるのが、Delphi4PythonExporterです。 DelphiやRAD Studioのフォームデザイナーで画面を作り、Pythonで扱える形式に出力できます。現行のExporterのREADMEでは、対応する開発環境に導入したあと、Tools → Export to Pythonから出力する方法が案内されています。 ただし、フォームデザイナーを使う方法では、別途DelphiまたはRAD Studio側の環境が必要です。また、ExporterのバージョンとIDEの対応関係を確認してください。 GUIを学び始めた段階では、最初からフォームデザイナーを使うよりも、Form、Button、Edit、OnClickの関係をコードで理解した方が分かりやすいと思います。 7. PyScripterとの関係 PyScripterもDelphi系の技術を利用しているPython向けIDEですが、DelphiVCLとは役割が違います。 | 項目 | PyScripter | DelphiVCL | | --- | --- | --- | | 位置付け | Pythonの統合開発環境(IDE) | PythonのGUIモジュール | | 主な用途 | 編集、実行、デバッグ | ウィンドウや部品の作成 | | 使い方 | 開発ツールとして起動 | Pythonからimportする | | 一緒に使えるか | はい | はい | 公式のActivityIndicatorサンプル説明にも、PyScripterでソースを開いて実行する手順が記載されています。 PyScripterに限らず、VS Codeなどでコードを書いてPowerShellから実行することもできます。DelphiVCLを使うために特定のPython IDEを導入する必要はありません。 8. CSV・DuckDB・WSL2との組み合わせ 実際の業務ツールで考えると、GUIの部分とデータ処理の部分は分けておく方が扱いやすくなります。 例えば、Windows側でDelphiVCLの画面を動かし、CSVやDuckDBの検索をPythonで行う構成です。さらに、大きな処理だけをWSL2 UbuntuやDockerで実行し、結果をWindows側へ返す方法も考えられます。 <!-- FIG04_START: images/fig04_windows_wsl2_backend.png --> !fig04_windows_wsl2_backend.png 図4:WindowsのGUIとWSL2/Docker上の処理を分担する構成例。DelphiVCLそのものをLinuxで実行する図ではありません。 この構成で重要なのは、DelphiVCLを動かすPythonはWindows側に置くことです。DelphiVCLはWindows向けのネイティブモジュールなので、WSL2のLinux版Pythonにpip installしても同じようには使えません。 大量のデータ処理をボタンのクリックイベント内で同期的に実行すると、画面が応答しなくなる場合があります。重い処理は別プロセスやワーカーに分け、画面の更新はGUIスレッドで行う設計にしておく方が安全です。 9. 作成したアプリをEXEとして配布するには PythonスクリプトをEXE形式にする候補として、PyInstallerがあります。DelphiVCLの公式サンプルにも、Installerが用意されています。 .\.venv\Scripts\python.exe -m pip install pyinstaller .\.venv\Scripts\python.exe -m PyInstaller --onedir --name StationManager station_manager.py ただし、上のコマンドだけで、必ず配布可能なEXEが完成するとは限りません。DelphiVCLにはPython拡張モジュール以外のネイティブファイルも関係するためです。 公式Installerサンプルでは、PyInstallerの.specファイルにDelphiVCLのディレクトリをdatasとして追加する例が示されています。まず--onedir形式で必要ファイルの同梱を確認し、Pythonをインストールしていない別のWindows環境で起動テストするのがよいでしょう。 なお、再配布についてはライセンスの確認も必要です。公式READMEでは、配布用ライブラリはEmbarcadero Freeware License、ソースコードはMIT Licenseと案内されています。EXEやインストーラーを公開する前に条件を確認してください。 10. 他のPython GUIライブラリとの違い DelphiVCLが常に最適というわけではありません。用途によって適したライブラリは変わります。 | ライブラリ | 主な対象 | 特徴 | | --- | --- | --- | | DelphiVCL | Windows | DelphiのVCLをPythonから使える | | DelphiFMX | Windows、macOS、Linuxなど | FireMonkeyを使う別モジュール | | Tkinter | Windows、macOS、Linux | 標準ライブラリに含まれるGUI | | PySide6 | Windows、macOS、Linux | Qtの豊富なウィジェットや開発機能 | | wxPython | Windows、macOS、Linux | 各OSに合わせたGUIコントロール | Windows専用の業務ツールを短期間で作りたいなら、DelphiVCLは検討する価値があります。一方、LinuxやmacOSでも同じGUIを使う予定がある場合は、初めからPySide6などと比較した方がよいでしょう。 11. 試すときにつまずきやすい点 No matching distribution foundと表示される PythonのバージョンやOS、アーキテクチャが配布wheelと合っていない可能性があります。まずpython --versionと32bit/64bitを確認してください。特に、WSL2上のLinux版Pythonから導入しようとしていないかを確認します。 ウィンドウが表示されない Application.Initialize()、フォームの作成、Show()、Application.Run()の順序を確認します。エラーを調べている間はFreeConsole()を使わず、PowerShellから実行する方が状況を把握しやすくなります。 GUIが操作できなくなる イベント処理で長時間の計算やネットワークアクセスを待っていないか確認します。処理を非同期化する場合も、GUI部品をワーカー側から直接書き換えないようにします。 見た目だけでは使い勝手が決まらない VCL Stylesで見た目を変更することはできますが、文字の大きさ、HiDPI、キーボード操作、表の表示速度なども重要です。特に多件数データを扱う場合は、データベースで絞り込んでから画面に渡す構成にします。 おわりに DelphiVCLは、PythonからWindowsネイティブのGUIを作れる少し珍しい選択肢です。難しい仕組みを理解する前に、まず公式Quickstartのウィンドウを表示し、ActivityIndicatorやListViewのサンプルを動かしてみるのがよいと思います。 フォーム、入力欄、ボタン、イベント処理の関係が分かれば、CSVの変換ツールやデータベースの検索画面にも応用できます。データ処理をPython側に残せるため、今あるPythonのスクリプトにWindows向けの操作画面を付けたい場合にも使いやすい構成です。 一方で、DelphiVCLはWindows専用です。クロスプラットフォーム対応を考える場合は、この点を最初に判断しておく必要があります。 参考資料 - Embarcadero / DelphiVCL4Python(公式GitHub) - DelphiVCL公式ドキュメント - DelphiVCL Quickstart - 公式サンプル集 - PyPI / delphivcl - Delphi4PythonExporter - PythonGUI.org / DelphiVCLコンポーネント紹介 - Qiita公式 / Mermaidの利用方法 <!-- Qiita投稿用メモ(公開時は削除可) 記事タイトル:PythonからDelphiのWindows GUIを使う ― DelphiVCLの基本・公式サンプル・アプリ作成 推奨タグ:Python, Delphi, GUI, Windows, VCL 確認日:2026-10-27 図の差し替え一覧: 図1 images/fig01_delphivcl_architecture.png PythonとVCLの関係 図2 images/fig02_station_form_components.png 観測所登録GUIの画面構成 図3 images/fig03_station_registration_flow.png 入力・登録・CSV保存の流れ 図4 images/fig04_windows_wsl2_backend.png Windows GUIとWSL2/Dockerの分担 現時点ではMermaid図を本文に掲載しています。画像ファイルは同梱していません。 画像を作成したら、各 FIGxx_START ~ FIGxx_END の間にあるMermaidコードブロックを 次の画像記法に置き換えてください。図番号とキャプションはそのまま残せます。  上記images/以下の名称は画像作成時の管理名で、実際のローカルパスではありません。 -->