Jump to content
Juan C.Cilleruelo

Creation of TPythonDelphiVar on-the-fly don't works as expected.

Recommended Posts

I'm having the following problem with TPythonDelphiVar component.


I use the next method to create one instance of this component on-the-fly:

function TForm1.NewVariable(AVarName :string):TPythonDelphiVar;
begin
   Result := TPythonDelphiVar.Create(nil);
   Result.Engine    := PythonEngine;
   Result.Module    := '__main__';
   Result.VarName   := AVarName;
   Result.Initialize;
end;

I have a Private variable declared in the TForm1class, like this:

public
    FVariable :TPythonDelphiVar;


And I use the next code to create on-the-fly my variable QUANTITY:

FVariable := NewVariable('QUANTITY');
FVariable.Value := 1.0;


All seems ok, but when I execute the program, and I try to print the value of QUANTITY:

(Phyton script).

print(QUANTITY)

I get the following message error in a message error window: "NameError: 'QUANTITY' is not defined. " 

And in the output memo of the PythonEngine, the next one:

Traceback (most recent call last):
  File "<string>", line 13, in <module>
NameError: name 'QUANTITY' is not defined


I can't understand why creating the TPythonDelphiVar on-the-fly doesn't work while creating the same component in design time works well. 

Do you understand what the problem is?

Share this post


Link to post

The same problem with the class TPythonModule.  If I create in visual form, including it on a form, it works well. If I create it on the fly, the next statements 

 

FPythonModule.AddDelphiMethod('ComponentCount', ComponentCount, 'ComponentCount');
FPythonModule.AddDelphiMethod('GetPRICE'      , GetPRICE      , 'GetPRICE'      );

 

run, but when I try to use ComponentCount in my Python Script, does not exist. 

 

what's happening?   

 

Share this post


Link to post

Hello Juan, Do you have fixed this issue or do you have another solution?

thanks

Regards Andreas

Share this post


Link to post

If you create an Engine client (e.g. TPythonDelphiVar TPythonModule) after the engine is initialized, you should call the client Initialize method.   If the client is created before the engine is initialized, you should not call Initialize.

Share this post


Link to post

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×