Jump to content

pyscripter

Members
  • Content Count

    875
  • Joined

  • Last visited

  • Days Won

    51

Everything posted by pyscripter

  1. pyscripter

    P4D Android external library

    It is part of Embarcadero/P4D-Data-Sciences: A collection of lightweight Python wrappers based on Python4Delphi simplifying Data Sciences development with Delphi (github.com) This is a similar project to Embarcadero/PythonPackages4Delphi: General collection of Python Packages wrapped for use in Delphi and C++Builder (github.com) and uses the same infrastructure. You need to have a similar setup for using moviePy to the PyTorch sample. These repos have been developed and are being maintained by Embarcadero. I am not involved in them and have never used them. You should direct your questions and issues to the respective repos.
  2. pyscripter

    P4D Android external library

    Did you have a look at the sample I pointed out above?
  3. pyscripter

    CreateComponent() equivalent for non-component classes?

    The recommended way to expose classes is to use TPyClassWrapper<T: class>. If for example you have a class TMyClass you want to expose to python, you can use the above from unit wrappers as follows: PyDelphiWrapper1.RegisterDelphiWrapper(TPyClassWrapper<TMyClass>); or at runtime (e.g. inside the FormCreate handler: PyDelphiWrapper1.RegisterDelphiWrapper(TPyClassWrapper<TMyClass>).Initialize; If you want your class to capable of being instantiated from python then do: TMyClassWrapper = class(TPyClassWrapper<TMyClass>) constructor CreateWith(APythonType: TPythonType; args, kwds: PPyObject); overload; override; end; constuctor TMyClassWrapper.CreateWith(APythonType: TPythonType; args, kwds: PPyObject); begin Create(APythonType); DelphiObject := TMyClass.Create; end; and in the FormCreate handler: PyDelphiWrapper1.RegisterDelphiWrapper(TMyClassWrapper).Initialize; In your python script you can then create instances using the pythonic from delphi_module import MyClass obj = MyClass() With TStringList is a bit more complicated since the superclass TStrings has already been exposed. To maintain the TStrings functionality you need to do the following: type TStringListWrapper = class(TPyDelphiStrings) private function GetDelphiObject: TStringList; procedure SetDelphiObject(const Value: TStringList); public constructor CreateWith(APythonType: TPythonType; args, kwds: PPyObject); overload; override; class function DelphiObjectClass : TClass; override; class procedure RegisterMethods( PythonType : TPythonType ); override; class procedure RegisterGetSets( PythonType : TPythonType ); override; // Properties property DelphiObject: TStringList read GetDelphiObject write SetDelphiObject; end; class function TStringListWrapper.DelphiObjectClass: TClass; begin Result := TStringList; end; function TStringListWrapper.GetDelphiObject: TStringList; begin Result := inherited DelphiObject as TStringList; end; class procedure TStringListWrapper.RegisterGetSets(PythonType: TPythonType); begin // Do not call inherited end; class procedure TStringListWrapper.RegisterMethods(PythonType: TPythonType); begin // Do not call inherited end; procedure TStringListWrapper.SetDelphiObject(const Value: TStringList); begin inherited DelphiObject := Value; end; constructor TStringListWrapper.CreateWith(APythonType: TPythonType; args, kwds: PPyObject); begin Create(APythonType); DelphiObject := TStringList.Create; end; and in the FormCreate handler: PyDelphiWrapper1.RegisterDelphiWrapper(TStringListWrapper).Initialize; You can then use it in your python scripts as follows: from delphi_module import StringList sl = StringList() sl.Add("abc") print(sl[0])
  4. pyscripter

    P4D Android external library

    Also have a look at this sample from https://github.com/Embarcadero/P4D-Data-Sciences/.
  5. pyscripter

    P4D Android external library

    Dependencies: Please make sure the following are installed before installing this library and in the following order: Python4Delphi PythonEnvironments Lightweight-Python-Wrappers Each library depends on the one above it, once these are installed this library will also install
  6. pyscripter

    P4D Android external library

    To automatically deploy python modules you need to use these related projects: Embarcadero/Lightweight-Python-Wrappers: Lightweight Wrappers based on Python4Delphi to make it easy to import Python modules into Delphi components. (github.com) Embarcadero/PythonPackages4Delphi: General collection of Python Packages wrapped for use in Delphi and C++Builder (github.com) Embarcadero/P4D-Data-Sciences: A collection of lightweight Python wrappers based on Python4Delphi simplifying Data Sciences development with Delphi (github.com) The second one already contains the wrapped MoviePy python package.
  7. pyscripter

    Python4Delphi Crash immediately after launch

    You do not need to understand anything, Just place a breakpoint on the Initialize statement and after the debugger stops there, keep pressing F7 (step in) until the error occurs. Anyway, I have downloaded the embedded version of python 3.12.6 64bits from https://github.com/adang1345/PythonWin7, extracted the zip file in a directory and used the following properties in PythonEngine: DllPath C:\python-3.12.6-embed-amd64 PythonEngine.RegVersion : 3.12 PythonEngine.DllName : python312.dll PythonEngine.UseLastKnownVersion : False It seems to work fine on a Windows 11 machine. You can try the same on your windows 7 machine.
  8. pyscripter

    Python4Delphi Crash immediately after launch

    So why don't you step in Initialize?
  9. pyscripter

    Python4Delphi Crash immediately after launch

    Just step into LoadDLL and observe where exactly the error occurs. I am not a magician. As I said, python 3.12 + windows 7 + delphi XE2 is not supported by python and by P4D. If you can come up with a fix I would consider implementing it.
  10. pyscripter

    Python4Delphi Crash immediately after launch

    Possibly. There have been a lot of changes in the last six months. I am afraid support for running unofficial newer versions of python on Windows 7 is outside the scope of the P4D project. It might help though if you debug and report at which exact point the error occurs.
  11. pyscripter

    Python4Delphi Crash immediately after launch

    That's why we debug programs stepping through the code, To know exactly where the error occurs. And what do you mean crash? Cannot you debug and step into LoadDLL? Or set FatalMsgDlg to True and FatalAbort to False. Do you get an error message? Most likely the python dll fails to load. The most common reason: Are you compiling for 64bits? For more details please read FindingPython · pyscripter/python4delphi Wiki (github.com) Also, could you update python to 3.12.3 and see whether it makes a difference? Needless to say that I cannot reproduce the issue here.
  12. pyscripter

    Python4Delphi Crash immediately after launch

    There is no such code in P4D. Instead: PyWideStringList_Append(PWSL, PWCharT(StringToWCharTString(Paths[I]))); Your code sample above makes no sense. SplitString returns a string array. So code like this: writeln(PansiChar(ansistring(ar))); should contain array indices (e.g. ar[1]). And in any case that code is only executed if you try to set the python path and has been around for quite a while. It is not executed for example by any of the demos. With the latest change Demo36 should work without issues. Again please provide a minimal project that produces errors.
  13. pyscripter

    Python4Delphi Crash immediately after launch

    This was not related to the latest revisions. There was an issue in the Demo related to PythonEngine being destroyed before the threads terminated. This is now fixed in version control. Please try with the latest release and report if the issue has been fixed.
  14. pyscripter

    Python4Delphi Crash immediately after launch

    Which version of P4D are you using? Getit or github and if the latte from which repo? Which version of python? Could you post a minimal project that reproduces the crash?
  15. pyscripter

    P4D Android error

    You need to deploy python to the Android device for this to work. Please see: Embarcadero/PythonEnvironments: Components to simplify the deployment for Python environments for Delphi applications using Python4Delphi. (github.com) and PythonEnvironments/samples/environments/deploy/sample_06_SimpleAndroid at main · Embarcadero/PythonEnvironments (github.com)
  16. Delphi 12.2 is now available for download from https://my.embarcadero.com/.
  17. pyscripter

    TTaskDialogs not working with Delphi Styles

    As mentioned above, 12.2 works correctly at 300%, But maybe there is an issue when running inside a VM.
  18. pyscripter

    How to release memory used by exceptions?

    This was a reference counting bug. This is now fixed in version control. See Memory leak when PyErr_SetObject is used · Issue #485 · pyscripter/python4delphi (github.com). Could you please try with the latest version and report whether the issue is solved.
  19. pyscripter

    How to release memory used by exceptions?

    Could you please post a minimal project (zipped) demonstrating the memory leak?
  20. pyscripter

    TTaskDialogs not working with Delphi Styles

    I am using the Delphi 12 IDE on a 300% display and I am not observing such issues. In PyScripter I am using the SilverpointDev/sptbxlib: SpTBXLib is an expansion package for TB2K Delphi components that adds multiple features including support for styles and custom skins. (github.com) for menus, which I think is still the best Delphi menu components and work really well with VCL styles and Hi-DPI.
  21. pyscripter

    TTaskDialogs not working with Delphi Styles

    Please allow me to disagree. You can produce good-looking flicker-free and DPI-aware applications with recent versions of Delphi. Have you tried PyScripter for instance? The Delphi IDE is also built with VCL Styles.
  22. pyscripter

    TTaskDialogs not working with Delphi Styles

    https://quality.embarcadero.com/browse/RSP-41990 See also EtheaDev/StyledComponents: Components similar to Delphi VCL Buttons, Toolbar, DbNavigator, BindNavigator, ButtonGroup and CategoryButtons with Custom Graphic Styles, and an advanced, full-customizable TaskDialog, also with animations! (github.com). They contain a Task Dialog can be displayed with Vcl Styles (and many others). File dialogs are styled by VCL though. I am not aware of any major issues.
  23. pyscripter

    InputQuery issue..

    Use the overload without the last argument (which cannot be nil): if InputQuery('User Information', ['Enter your name:', 'Enter your age:', 'Enter your city:'], Values) then
  24. pyscripter

    clear a tjsonobject

    There is: function TJSONObject.RemovePair(const PairName: string): TJSONPair; To clear all pairs: JsonObject.SetPairs([]); You could also Free the JsonObject and create a new one.
  25. The following code (from VirtualTrees) raises a new warning in Delphi 12.2: TVirtualTreeColumns = class(TCollection) ... property Items[Index : TColumnIndex] : TVirtualTreeColumn read GetItem write SetItem; default; ... end The warning says: [dcc64 Warning] VirtualTrees.Header.pas(280): W1075 Overloading a similar index type by declaring an array property 'Items' VirtualTrees.Header.pas(280): Related member: property TVirtualTreeColumns.Items[TColumnIndex]: TVirtualTreeColumn; VirtualTrees.Header.pas(280): Related member: property TCollection.Items[Integer]: TCollectionItem; I get quite a few similar warnings in my code base. Clearly the overwriting (and not overloading) is intentional. Any ideas of how to get rid of this warning without suppressing it?
×