python delphi_Python For Delphi---更好地协同

本文介绍了如何在Delphi中使用Python4Delphi控件实现Python代码的嵌入,包括基本的参数传递、加法计算器示例,以及如何通过JSON和Python模块调用进行更复杂功能的演示。还探讨了通过COM调用Python模块的方法。
摘要由CSDN通过智能技术生成

先上相关资源的下载吧:

python4delphi:

主页:

下载:

现在已支持到XE2.

必看(作者):

下面要示范的就是在XE2下完成.其实源码检出后,里面有30多个示例,几乎涵盖了Python4Delphi的所有方面.好吧,我们下面做个简单的加法计算器,主要是演示二者之间的参数传递.

当然,需要在Delphi中先安装上PythonForDelphi控件包,安装不麻烦,可参考上述资料的说明文档.

在XE2中新建一个工程,然后在窗口中依次放上一个TPythonEngine,三个TPythonDelphiVar,TPythonDelphiVar的VarName分别设置为Num1,Num2,Result.再放上三个LabelEdit,分别命名为edtNum1,edtNum2,edtResult.

上代码:

unit FfrmMain;

interface

uses

Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,

Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls, RzPanel,

PythonEngine, PythonGUIInputOutput, RzButton;

type

TfrmMain = class(TForm)

memInput: TMemo;

Splitter1: TSplitter;

memOutput: TMemo;

RzPanel1: TRzPanel;

pyEngine: TPythonEngine;

PythonGUIInputOutput1: TPythonGUIInputOutput;

btnExcute: TRzBitBtn;

PythonDelphiVar1: TPythonDelphiVar;

PythonDelphiVar2: TPythonDelphiVar;

edtNum1: TLabeledEdit;

edtNum2: TLabeledEdit;

edtResult: TLabeledEdit;

PythonDelphiVar3: TPythonDelphiVar;

procedure btnExcuteClick(Sender: TObject);

procedure PythonDelphiVar1GetData(Sender: TObject; var Data: Variant);

procedure PythonDelphiVar2GetData(Sender: TObject; var Data: Variant);

procedure PythonDelphiVar3SetData(Sender: TObject; Data: Variant);

private

{ Private declarations }

public

{ Public declarations }

end;

var

frmMain: TfrmMain;

implementation

{$R *.dfm}

procedure TfrmMain.btnExcuteClick(Sender: TObject);

begin

pyEngine.ExecStrings(memInput.Lines);

end;

procedure TfrmMain.PythonDelphiVar1GetData(Sender: TObject; var Data: Variant);

begin

Data:=edtNum1.Text;

end;

procedure TfrmMain.PythonDelphiVar2GetData(Sender: TObject; var Data: Variant);

begin

Data:=edtNum2.Text;

end;

procedure TfrmMain.PythonDelphiVar3SetData(Sender: TObject; Data: Variant);

begin

edtResult.Text:=Data;

end;

end.

上面窗体中还放了两个memo和一个TPythonGUIInputOutput,这些可以不用.

然后在memInput中输入Python代码:

Result.Value=int(Num1.Value)+int(Num2.Value)

在执行按钮中填加代码:

pyEngine.ExecStrings(memInput.Lines);

当然,可以直接执行上面的Python代码.

在edtNum1中输入一个数字,在edtNum2中输入一个数字,点击按钮,执行python脚本后就可以在edtResult中返回计算结果.

注意:

Result.Value=int(Num1.Value)+int(Num2.Value)

TPythonDelphiVar传人的是字符类型,所以要转换为int后再相加,否则是字符串相加.

这样,我们就完成了Delphi传递参数到Python,Python执行完毕后将结果再返回给Delphi的演示.好了,我们可以好好利用Python,将它很好地嵌入到Delphi中了.

如果要传递更复杂的参数怎么办?我想,或许可以将要传递的参数JSON化,然后将JSON作为参数在二者之间相互传递,这样可以完成更复杂的功能.

附上Python JSON文档:

Delphi JSON之SuperObj:

Delphi通过PythonForDelphi变量来和Python交换数据可以,有没有别的办法了呢?有,可以像COM一样来调用Python模块的变量和函数,这看起来好像能更酷一些 :-)

感谢samson,是他的一篇文章使我学习到了这个方法,并且很热心地给予了指教!

废话少说,先上Python代码(hello.py,放到程序目录下):

strPython='Hello,This is a python string !'

dicPython={'StringInfo':'Hello,This is a python string !'}

lstPython=list('Hello,This is a python string !')

def SayHello(s):

return 'Hello,'+s

上面是简单的示例,有变量和函数,我们看看在Delphi中怎样来调用.

在Delphi中写下面的代码:

var

PyModule: variant;

....

PyModule := Import('hello');

//测试Python变量传递

Memo1.Lines.Add(PyModule.strPython);

Memo1.Lines.Add(PyModule.dicPython);

Memo1.Lines.Add(PyModule.lstPython);

Memo1.Lines.Add(PyModule.SayHello('Garfield'));

执行后,在Delphi的Memo1中将看到下面的内容:

Hello,This is a python string !

{'StringInfo': 'Hello,This is a python string !'}

['H', 'e', 'l', 'l', 'o', ',', 'T', 'h', 'i', 's', ' ', 'i', 's', ' ', 'a', ' ', 'p', 'y', 't', 'h', 'o', 'n', ' ', 's', 't', 'r', 'i', 'n', 'g', ' ', '!']

Hello,Garfield

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值