设为首页 收藏本站
查看: 2384|回复: 0

[经验分享] Python For Delphi---更好地协同

[复制链接]

尚未签到

发表于 2015-4-28 06:58:01 | 显示全部楼层 |阅读模式
  先上相关资源的下载吧:
  python4delphi:
  主页:
  http://code.google.com/p/python4delphi/
  下载:
  svn checkout http://python4delphi.googlecode.com/svn/trunk/ python4delphi-read-only
  
  现在已支持到XE2.
  必看(作者):
  http://www.atug.com/andypatterns/pythonDelphiTalk.htm
  下面要示范的就是在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文档:
  http://docs.python.org/2/library/json.html
  Delphi JSON之SuperObj:
  http://www.progdigy.com/?page_id=6
  http://code.google.com/p/superobject/
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-61307-1-1.html 上篇帖子: Python 发音 下篇帖子: python : list tuple set dictionary [转]
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表