2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

DelphiFMX for Python入門 ― FireMonkeyで作るクロスプラットフォームGUI

2
Posted at

DelphiFMX for Python入門 ― FireMonkeyで作るクロスプラットフォーム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コードからフォームや部品を操作できるのが特徴です。ビジュアルデザイナーを使いたい場合は、後述する追加ツールを利用します。

公式サイトとソースコードは次の場所に公開されています。

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を導入する必要はありません。

9. Androidアプリにする場合

DelphiFMXはAndroidも対象としていますが、WindowsやLinuxのようにPythonスクリプトをそのまま起動する方法とは異なります。

Android向けには、PythonFMXBuilder という専用ツールが用意されています。PythonスクリプトをAndroidアプリに組み込み、端末へのインストールや配布ができる形式へまとめます。

ただし、Android SDKやJDKなどの準備が必要です。動作環境、パッケージ化の条件、最新のビルダーの制約は事前に確認してください。

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などで実装して比較すると、開発しやすさや使い勝手の違いも見えてきます。

次は、簡単なプログラムを作成して、機能を拡張していきたいと考えています。

参考資料


2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?