Python4Delphi

Rund um die LCL und andere Komponenten
Antworten
EugenE
Beiträge: 440
Registriert: So 10. Dez 2006, 14:59
OS, Lazarus, FPC: MacOSX Lion 10.7 (L 0.9.31 FPC 2.7.1)
CPU-Target: 64Bit
Kontaktdaten:

Python4Delphi

Beitrag von EugenE »

Hey hat schon jemand damit gearbeitet vllt auch noch unter Delphi zeiten? (ich nich hatte noch garkein delphi xD)

Hab mir die Sources von http://code.google.com/p/python4delphi/ geladen, jedoch kann man das Lazarus package nich so einfach installieren, darum hab ich auch sofort nen Bug-Report + Patch erstellt, und ein tag davor den Entwickler angeschrieben jedoch bisher keine Antwort :(

Bugreport: http://code.google.com/p/python4delphi/ ... etail?id=2

Also funktionieren tut es weitgehend jedoch ich kann einfach keine Form durch Python-Code erstellen :( bekomme immernur ne Access Violation ohne einen lesbaren Trace ... naja hoffe ihr habt glück

_X_
Beiträge: 250
Registriert: Di 16. Dez 2008, 20:13
OS, Lazarus, FPC: aptosid (aptosid.com); Lazarus SVN gtk2+qt4; FPC 2.4.0
CPU-Target: 32/64Bit

Re: Python4Delphi

Beitrag von _X_ »

Hast du auch Python4VCL installiert?

mfg _X_

EugenE
Beiträge: 440
Registriert: So 10. Dez 2006, 14:59
OS, Lazarus, FPC: MacOSX Lion 10.7 (L 0.9.31 FPC 2.7.1)
CPU-Target: 64Bit
Kontaktdaten:

Re: Python4Delphi

Beitrag von EugenE »

Installieren konnte man es nicht, ich hab es erstmal mit vielen IFDEFS ausgespickt, dann konnte man es compilieren jedoch kommt danach immernoch ein Access Violation :(

ErnstVolker
Beiträge: 326
Registriert: Di 17. Feb 2009, 10:44
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Python4Delphi

Beitrag von ErnstVolker »

Guten Tag zusammen,

ich hänge mich mal an diesen Beitrag an. Ich bin dabei das hier: http://wiki.freepascal.org/Using_Python_in_Lazarus_on_Windows/Linux auszuprobieren. Komme aber mit dem zugehörigen Beispiel nicht wirklich gut zurecht.

Der Entwickler legt wohl Wert auf Python 3. Ich nutze aber Python 2.7 aus Miniconda bzw. Anaconda. Wenn ich zu Testzwecken die Namen und Pfad entsprechend ändere stürzt schon mal nix ab, aber zu sehen ist auch nix, außer dass eine Art "schwarze Eingabeaufforderung" aufgeht.
Warum wird in der Prozedur:

Code: Alles auswählen

procedure TfmMain.PythonEngineAfterInit(Sender: TObject);
eine zip-Datei python33.zip benötigt?

Mit dem "edConsoleKeyPress" kann ich auch nix anfangen. Ich finde keine entsprechende "memoConsole". Ich habe einfach ein TMemo genommen.

Hat von Euch jemand Erfahrung damit? Mir schwebt vor mal mit numpy und matplotlib einen sinus darzustellen. Hierfür Amplitude (A) und Omega (w) von Lazarus nach Python zu schicken und die Arrays für "t" bzw. "y" (y = A*sin(w*t)) zurückzubekommen. Das Arrays für t soll in Python entstehen (linespace), folglich das y-Array auch.

Gibt es auch die Möglichkeit ohne "Python4Lazarus" von Lazarus aus Python-Scripte aufzurufen und an diese Werte zu übergeben, von diesen zu empfangen? Wenn ja, was ist einfacher?

Für Hilfe danke ich im voraus.

Viele Grüße

Volker

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: Python4Delphi

Beitrag von Christian »

Ich benutz es im promet als Scriptengine (eine mögliche)
https://github.com/cutec-chris/python4delphi
Keine Ahnung was da im Wiki im Moment steht, mit meiner github Version läuft aber alles.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

ErnstVolker
Beiträge: 326
Registriert: Di 17. Feb 2009, 10:44
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Python4Delphi

Beitrag von ErnstVolker »

Hallo Christian,

vielen Dank für den Link. Ich finde kein Lazarus-Package. Nutzt man nur die Units? Wie installiert man es in Lazarus ohne Package?

Gruß

Volker

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: Python4Delphi

Beitrag von Christian »

W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

ErnstVolker
Beiträge: 326
Registriert: Di 17. Feb 2009, 10:44
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Python4Delphi

Beitrag von ErnstVolker »

Hallo Christian,

danke für die Links. die lpk's waren mir nicht aufgefallen. Leider installiert das Package für Lazarus nicht. Das Kompilieren bricht ab. Meldung: PythonGUIInputOutput.pas(53,3) "Implementation" expected but STDCTRLS found.
Beim FPC-Package wird logischerweise das Installieren nicht angeboten.

Habe vorher aktuelles Lazarus installiert und die Vorversion 1.6.2 runtergeworfen.

Hast Du dafür Abhilfe?

Gruß

Volker

ErnstVolker
Beiträge: 326
Registriert: Di 17. Feb 2009, 10:44
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Python4Delphi

Beitrag von ErnstVolker »

Hallo Christian,

vielen Dank für die Hilfe. Hab' ein wenig gefummelt und die Installation hinbekommen. So lernt man nebenbei noch was zu Packages. Die einzelnen Komponenten werden jetzt angezeigt, allerdings fehlen die kleinen grünen Schlangenköpfe. Aber es gibt die Hilfe wenn man über den Knopf fährt.

Viele Grüße

Volker

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: Python4Delphi

Beitrag von Christian »

Ich benutz nur das fpc Package, hab die Unit gefixt.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

ErnstVolker
Beiträge: 326
Registriert: Di 17. Feb 2009, 10:44
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Python4Delphi

Beitrag von ErnstVolker »

Hallo zusammen,

ich habe im Zusammenhang mit Python4Delphi die Frage nach der Umwandlung von Variant zu Double.

TPythonDelphiVar liefert mit "Ergebnis.Value" den Wert (auch ein Array) als Variant zurück. Wie kann man ein Variant-Array in ein Double-Array überführen?

Ich habe hier: https://stackoverflow.com/questions/113 ... amic-array nachgesehen und es auch ausprobiert, aber

Code: Alles auswählen

function DoubleDynArrayFromVarArray(const V: Variant): TDoubleDynArray;
var
  P: Pointer;
  Count: Integer;
begin
  Result := nil;
  if not VarIsArray(V) or (VarType(V) and varTypeMask <> varDouble) or
    (VarArrayDimCount(V) <> 1) then
    raise EVariantInvalidArgError.Create(SVarInvalid); [color=#FF0000]<<<----------- hier ist das Programm ausgestiegen bzw. hängen geblieben!![/color]
 
  Count := VarArrayHighBound(V, 1) - VarArrayLowBound(V, 1) + 1;
  if Count = 0 then
    Exit;
 
  P := VarArrayLock(V);
  try
    SetLength(Result, Count);
    Move(P^, Result[0], Count * SizeOf(Double));
  finally
    VarArrayUnlock(V);
  end;
end;


Dann habe ich "zu Testzwecken" mal den oberen Teil von "if not ... bis einschließlich raise ..." auskommentiert und beim Array kommt nur Mist raus.

Zum Vergleich habe ich in einer For-Schleife jeden einzelnen Wert des Variant-Array mit Double(Wert[i]) gecastet und mit writeln danach beide Arrays ausgegeben. Bei dem mit "DoubleDynArrayFromVarArray" gecasteten Array kommt Mist raus.

Es geht zwar mit einer for-Schleife (das Array hatte nur 100 Einträge) aber wenn es mal mehr Elemente werden (mehrere 10 Tsd. oder so), dann wird's bestimmt langsam, oder?

Hat jemand hierfür eine Idee?

Vielen Dank und viele Grüße

Volker

ErnstVolker
Beiträge: 326
Registriert: Di 17. Feb 2009, 10:44
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Python4Delphi

Beitrag von ErnstVolker »

Hallo Zusammen,

ich muß nochmal blöd fragen: Funktioniert Python4Delphi mit python2 und python3 sowie auch in den 64bit Varianten?

Viele Grüße

Volker

Antworten