本文作者:icy

pascal-在Delphi的世界里召唤Python:Python4Delphi项目深度解析**

icy 昨天 15 抢沙发
pascal-在Delphi的世界里召唤Python:Python4Delphi项目深度解析**摘要: 好的,这是一篇关于 Python4Delphi 项目的详细介绍和技术实例文章。 标题:在Delphi的世界里召唤Python:Python4Delphi项目深度解析 引言:当经典P...

pascal-在Delphi的世界里召唤Python:Python4Delphi项目深度解析**

好的,这是一篇关于 Python4Delphi 项目的详细介绍和技术实例文章。


标题:在Delphi的世界里召唤Python:Python4Delphi项目深度解析

引言:当经典Pascal遇上现代Python

在当今快速发展的软件开发领域,语言的融合与互操作已成为提升开发效率、扩展应用能力的关键。对于广大的Delphi/Object Pascal开发者而言,虽然拥有构建高性能、原生Windows应用的强大武器,但在面对数据科学、机器学习、快速脚本化或利用丰富的Python生态库时,有时会感到力不从心。Python4Delphi 项目的出现,正是为了架起这座桥梁,让经典的Delphi应用程序能够无缝集成和驱动强大的Python脚本引擎,实现“强强联合”。

一、Python4Delphi是什么?

Python4Delphi 是一个开源的自由库,它通过一组精心设计的Delphi组件和类,为Delphi和C++ Builder应用程序提供了与Python解释器的完整接口。简而言之,它允许你:

  1. 在Delphi应用中嵌入Python解释器:就像在应用中内置了一个Python运行环境。
  2. 执行Python代码:可以执行单行命令、整个脚本文件或模块。
  3. 双向数据交换:轻松地在Delphi的变量(如字符串、整数、数组,甚至TStrings)和Python的数据类型(如str, int, list, dict, numpy array)之间进行转换。
  4. 访问Python对象:在Delphi端创建、操作和调用Python中的函数、类实例。
  5. 使用Python巨量的第三方库:直接在Delphi程序中利用如NumPy, Pandas, Matplotlib, TensorFlow, PyTorch, OpenCV, Django等成千上万的Python库,极大地扩展了Delphi应用的功能边界。

项目托管在GitHub上,地址为:https://github.com/pyscripter/python4delphi

二、核心组件与架构

Python4Delphi主要提供以下几个核心组件(在IDE的组件面板上通常名为TPython相关):

  • TPythonEngine: 这是核心引擎。每个应用通常只需要一个实例,它负责初始化Python解释器,管理模块和运行时。它是所有Python交互的起点。
  • TPythonGUIInputOutput: 一个非常实用的组件,用于重定向Python的标准输入(stdin)、标准输出(stdout)和标准错误(stderr)。你可以将它们重定向到Delphi的TMemo、TRichEdit等控件,从而在GUI中显示Python的print输出和错误信息,并模拟输入。
  • TPythonModule: 允许你创建可以被Python代码导入的“Delphi模块”。这意味着你可以用Delphi/Pascal编写函数,并将其暴露给Python脚本使用,实现Python调用Delphi代码的逆操作。
  • TPythonType: 用于创建可以被Python识别的自定义Delphi类类型。
  • TPythonDelphiVar: 用于在Delphi和Python之间共享变量。在Delphi中修改该变量,Python脚本中可以读取到最新值,反之亦然。

其架构可以理解为:TPythonEngine作为总控,加载了Python解释器(如python39.dll)。Delphi代码通过引擎提供的接口与解释器交互,而TPythonGUIInputOutput等组件则处理输入输出流,形成一个完整的嵌入式脚本环境。

三、实战示例:从入门到进阶

下面通过几个具体的例子来展示Python4Delphi的强大与便捷。

环境准备: 1. 从GitHub下载Python4Delphi源码。 2. 将其包路径添加到Delphi的库路径,并安装组件包。 3. 确保系统已安装Python(建议使用与Delphi位数匹配的版本,如都是64位),并在TPythonEngineDllName属性中正确设置Python动态库的路径(如python39.dll)。

示例1:基础“Hello World”与执行脚本 目标:在Delphi窗体中点击按钮,执行一段Python代码,并将结果显示在Memo中。

  1. 在窗体上放置:TPythonEngine, TPythonGUIInputOutput, TButton, TMemo
  2. PythonGUIInputOutput1OutputError属性都指向Memo1
  3. PythonEngine1IO属性指向PythonGUIInputOutput1
  4. 双击按钮,编写事件代码:
text
procedure TForm1.Button1Click(Sender: TObject);
var
  script : TStringList;
begin
  // 方法1:直接执行Python代码字符串
  PythonEngine1.ExecString('import datetime');
  PythonEngine1.ExecString('print("Hello from Python! Today is:", datetime.datetime.now())');

  // 方法2:执行一个外部的.py文件
  script := TStringList.Create;
  try
    script.LoadFromFile('C:\myscript.py'); // 假设这个文件里有一些复杂的Python逻辑
    PythonEngine1.ExecStrings(script);
  finally
    script.Free;
  end;
end;

示例2:高级数据交换与使用NumPy 目标:在Delphi中生成数据,传递给Python的NumPy进行处理,再将结果取回Delphi显示。

假设我们已经通过pip install numpy安装了NumPy。

text
procedure TForm1.ButtonProcessDataClick(Sender: TObject);
var
  PyModule : PPyObject;
  PyFunc, PyArgs, PyResult : PPyObject;
  delphiArray : array of Double;
  i : Integer;
  resultValue : Double;
begin
  // 1. 准备Delphi端数据
  SetLength(delphiArray, 10);
  for i := 0 to High(delphiArray) do
    delphiArray[i] := i * 1.5; // [0, 1.5, 3.0, ...]

  // 2. 将Delphi数组转换为Python列表(Python4Delphi的VarArrayToPyObject函数简化了此过程)
  // 注意:需要引用 `VarPyth.pas` 单元以获得更便捷的转换函数。
  // 这里使用更底层的API演示:
  PyArgs := PythonEngine1.ArrayToPyList(delphiArray); // 一个辅助函数,需要自己简单封装或使用VarPyth

  // 3. 获取NumPy模块和函数
  PyModule := PythonEngine1.ImportImportModule('numpy');
  try
    PyFunc := PythonEngine1.PyObject_GetAttrString(PyModule, 'mean'); // 获取numpy.mean函数
    try
      // 4. 调用函数:计算平均值
      PyResult := PythonEngine1.PyObject_CallObject(PyFunc, PyArgs);
      try
        // 5. 将Python结果转换回Delphi类型
        if PythonEngine1.PyFloat_Check(PyResult) then
          resultValue := PythonEngine1.PyFloat_AsDouble(PyResult)
        else if PythonEngine1.PyLong_Check(PyResult) then
          resultValue := PythonEngine1.PyLong_AsLong(PyResult);

        ShowMessageFmt('The average calculated by NumPy is: %f', [resultValue]);
      finally
        PythonEngine1.Py_XDECREF(PyResult);
      end;
    finally
      PythonEngine1.Py_XDECREF(PyFunc);
    end;
  finally
    PythonEngine1.Py_XDECREF(PyModule);
    PythonEngine1.Py_XDECREF(PyArgs);
  end;
end;

使用 VarPyth.pas 简化版: Python4Delphi提供的VarPyth单元利用Delphi的Variant类型实现了更优雅的交互,上述代码可以简化为:

text
uses VarPyth; // 引入关键单元

procedure TForm1.ButtonProcessDataClick(Sender: TObject);
var
  np, myList, meanValue : Variant;
begin
  // 初始化Python引擎(假设已自动初始化)
  // 1. 导入numpy
  np := Import('numpy');

  // 2. 创建Python列表 (Delphi数组到Python列表的自动转换)
  myList := VarPythonCreate([0, 1.5, 3.0, 4.5, 6.0, 7.5, 9.0, 10.5, 12.0, 13.5]); // 直接创建

  // 3. 调用NumPy的mean函数,就像在Python中一样!
  meanValue := np.mean(myList);

  // 4. 结果自动转换为Delphi的Variant,可直接使用
  ShowMessageFmt('The average (via VarPyth) is: %s', [VarToStr(meanValue)]);
end;

VarPyth让代码几乎和Python本身一样简洁易读。

示例3:创建GUI图表(使用Matplotlib) 目标:在Delphi程序中,使用Python的Matplotlib生成一个图表,并显示在Delphi的TImage控件中。

text
uses VarPyth, System.IOUtils;

procedure TForm1.ButtonPlotClick(Sender: TObject);
var
  plt, np : Variant;
  fig, ax : Variant;
  x, y : Variant;
  script : string;
  tempFile : string;
begin
  plt := Import('matplotlib.pyplot');
  np := Import('numpy');

  // 生成数据
  x := np.arange(0, 4 * np.pi, 0.1);
  y := np.sin(x);

  // 创建图表 - 这里使用“Agg”后端,不显示GUI窗口,只渲染到图像
  plt.switch_backend('Agg');
  fig := plt.figure();
  ax := fig.add_subplot(111);
  ax.plot(x, y);
  ax.set_title('Sine Wave Generated from Delphi via Python4Delphi');
  ax.set_xlabel('X axis');
  ax.set_ylabel('Y axis');

  // 保存到一个临时文件
  tempFile := TPath.GetTempFileName + '.png';
  fig.savefig(tempFile, dpi:=96); // 使用命名参数语法
  plt.close(fig);

  // 在Delphi的TImage中加载生成的图片
  Image1.Picture.LoadFromFile(tempFile);

  // 清理临时文件(可选)
  DeleteFile(tempFile);
end;

四、优势与应用场景

  • 优势
    • 功能无限扩展:直接接入Python庞大的生态系统。
    • 性能与灵活性结合:核心业务逻辑用高效的原生Delphi编写,脚本化、算法或原型部分用灵活的Python。
    • 保护现有投资:无需用其他语言重写整个Delphi遗产应用,即可增加现代功能。
    • 提升开发效率:快速集成数据分析和AI功能。
  • 应用场景
    • 科学计算与工程仿真软件的脚本插件系统。
    • 工业控制软件中集成数据分析与报告生成。
    • 为现有的Delphi数据库应用添加机器学习和预测功能。
    • 利用Python进行自动化测试或配置Delphi应用。
    • 快速构建包含复杂图表和可视化的业务应用。

五、总结

Python4Delphi 是一个成熟且强大的工具,它成功地将Python的动态性和丰富的库生态引入了稳健的Delphi/Windows原生应用开发中。无论是简单的脚本自动化,还是复杂的数据科学和人工智能集成,它都提供了从基础到高级的完整解决方案。对于希望在不放弃Delphi优势的前提下拥抱现代编程潮流的开发者来说,Python4Delphi无疑是一个不可或缺的宝藏库。

通过上述介绍和实例,希望你能开始探索这个令人兴奋的项目,并在你的下一个Delphi项目中释放Python的威力。

python4delphi.zip
类型:压缩文件|已下载:1|下载方式:免费下载
立即下载
文章版权及转载声明

作者:icy本文地址:https://zelig.cn/2026/02/189.html发布于 昨天
文章转载或复制请以超链接形式并注明出处软角落-SoftNook

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

阅读
分享

发表评论

快捷回复:

验证码

评论列表 (暂无评论,15人围观)参与讨论

还没有评论,来说两句吧...