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コードでフォームやボタンの配置を記述できます。
図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の次のフォルダーを確認してみてください。
公式サンプル一覧:
https://github.com/Embarcadero/DelphiVCL4Python/tree/main/samples
| サンプル | 内容 | ソース |
|---|---|---|
| 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を使います。
画面の構成
図2:観測所登録アプリのコンポーネント構成。これは画面部品の関係図であり、実行画面のスクリーンショットではありません。
Pythonコード
次の内容をstation_manager.pyとして保存します。コードが少し長いため、折りたたんでいます。
station_manager.py(ソースコード全体を表示)
"""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()
実行します。
.\.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は画面上でどの部品の内側に表示するかを指定します。
図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側へ返す方法も考えられます。
図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専用です。クロスプラットフォーム対応を考える場合は、この点を最初に判断しておく必要があります。



