先上相关资源的下载吧:
python4delphi:
主页:
下载:
svn checkouthttp://python4delphi.googlecode.com/svn/trunk/ python4delphi-read-only
现在已支持到XE2.
必看(作者):
下面要示范的就是在XE2下完成.其实源码检出后,里面有30多个示例,几乎涵盖了Python4Delphi的所有方面.好吧,我们下面做个简单的加法计算器,主要是演示二者之间的参数传递.
当然,需要在Delphi中先安装上PythonForDelphi控件包,安装不麻烦,可参考上述资料的说明文档.
在XE2中新建一个工程,然后在窗口中依次放上一个TPythonEngine,三个TPythonDelphiVar,TPythonDelphiVar的VarName分别设置为Num1,Num2,Result.再放上三个LabelEdit,分别命名为edtNum1,edtNum2,edtResult.
上代码:
unitFfrmMain;interface
usesWinapi.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;typeTfrmMain= 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;procedurebtnExcuteClick(Sender: TObject);procedure PythonDelphiVar1GetData(Sender: TObject; varData: Variant);procedure PythonDelphiVar2GetData(Sender: TObject; varData: Variant);procedurePythonDelphiVar3SetData(Sender: TObject; Data: Variant);private
{Private declarations}
public
{Public declarations}
end;varfrmMain: TfrmMain;implementation
{$R *.dfm}
procedureTfrmMain.btnExcuteClick(Sender: TObject);beginpyEngine.ExecStrings(memInput.Lines);end;procedure TfrmMain.PythonDelphiVar1GetData(Sender: TObject; varData: Variant);beginData:=edtNum1.Text;end;procedure TfrmMain.PythonDelphiVar2GetData(Sender: TObject; varData: Variant);beginData:=edtNum2.Text;end;procedureTfrmMain.PythonDelphiVar3SetData(Sender: TObject; Data: Variant);beginedtResult.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: