Some sample python...
import adelphimodule
class ADict(dict):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.__dict__ = self
someitems = ADict(
first = 1,
second = "Two",
third = 3.0,
fourth = ADict(
subitem1 = True
}
)
print(adelphimodule.delphievent(someitems))
Now, in Delphi I stick a PythonModule on a form and hook it up to engine etc (i.e. all this bit works) - I name it delphimodule which will then make it accessible with the Python above.
Next I create an event for the module called delphievent
In delphi I run the Python and when it hits the adelphimodule.delphievent(someitems) which then triggers this bit of Delphi...
procedure TForm1.PythonModule1Events0Execute(Sender: TObject; PSelf, Args: PPyObject;
var Result: PPyObject);
var
log: TTrainLog;
begin
with GetPythonEngine do
begin
// Check if the transmitted object is a dictionary
if not PyDict_Check(Args) then
begin
Result := PyUnicodeFromString('===> Bad Event Handler!');
Exit;
end;
end;
Result := PyUnicodeFromString('===> Good Event Handler!');
end;
This code will make the Python print "Bad Event Handler" even though I've passed the event data that is a Python dict
The examples have a single event demo and it does nothing with passing data so I'm a little stumped over how to extract the data I passed in
I could write yet another module I guess but then I'd end up needing new modules for any new bunch of data I sent back to Delphi. The thing I'm trying to do is pass arbitary data back to delphi (tried packaging it as JSon but couldn't read ther string data either)
Edit : Got string passing OK now so can always pass as JSON