• Python For Delphi更好地协同


    先上相关资源的下载吧:

    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/

  • 相关阅读:
    OCP-1Z0-053-200题-77题-654
    OCP-1Z0-053-200题-45题-623
    OCP-1Z0-053-200题-46题-624
    OCP-1Z0-053-200题-48题-626
    OCP-1Z0-053-200题-49题-627
    OCP-1Z0-053-V13.02-619题
    OCP-1Z0-053-200题-43题-678
    OCP-1Z0-053-200题-44题-622
    OCP-1Z0-053-V13.02-512题
    OCP-1Z0-053-200题-38题-617
  • 原文地址:https://www.cnblogs.com/GarfieldTom/p/2860206.html
Copyright © 2020-2023  润新知