IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Lazarus Pascal Discussion :

Erreur Interface Lazarus-Python-mpmath


Sujet :

Lazarus Pascal

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 5
    Par défaut Erreur Interface Lazarus-Python-mpmath
    Bonjour,

    J'essaie d'interfacer Python avec Lazarus, essentiellement dans le but d'utiliser la librairie mpmath pour le calcul en multi-précision
    J'utilise la dernière version 3.8. Apparemment, Lazarus refuse la commande " GetPythonEngine.Initialize; "
    J'ai effectué les deux essais décrits ci-dessous sans succès.

    Pouvez-vous m'aider ? Merci




    Python4Delphi et mpmath ont été téléchargés et installés et ajoutés au projet Lazarus

    PythonEngine apparaît correctement dans la liste des fonctions de l'éditeur de source

    J'ai ajouté dans la fonction principale "Calcul"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    uses
    	PythonEngine, VarPyth;
     
     { TForm1 }
     
      TForm1 = class(TForm)     
    ...
        PythonEngine: TPythonEngine;  
    ...
    End;
    Premier essai
    ***********
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    procedure TForm1.FormCreate(Sender: TObject);
    Var
       a:String;
       Py:Variant;
    begin
       GetPythonEngine.Initialize;
       Py:=Import('mpmath');
     
       Py.mp.dps:=50;
       a:=Py.str(Py.mpf(2)**Py.mpf('0.5'));
       Form1.Memo2.Lines.Add(a);
    end;
    Citation Envoyé par Erreur
    calcul.pas(151,20) Error: identifier idents no member "Initialize"
    Deuxième essai
    **************
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    procedure TForm1.FormCreate(Sender: TObject);
    Var
       a:String;
       Py:Variant;
    begin
       with GetPythonEngine do
       begin
    //    GetPythonEngine.Initialize;
          Py:=Import('mpmath');
     
          Py.mp.dps:=50;
          a:=Py.str(Py.mpf(2)**Py.mpf('0.5'));
          Form1.Memo2.Lines.Add(a);
       end;
    end;
    Citation Envoyé par Erreur
    Le projet project a levé une classe d'exception "Exception" avec le message :
    No Python engine was created
    dans le fichier "..\..\Source\PythonEngine.pas à la ligne 9764
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function  GetPythonEngine : TPythonEngine;
    begin
      if not Assigned( gPythonEngine ) then
        raise Exception.Create(SCannotCreatePythonEngine);    // <==   (9764)
      if not gPythonEngine.Finalizing and not gPythonEngine.Initialized then
        raise Exception.Create(SCannotInitPythonEngine);
      Result := gPythonEngine;
    end;

  2. #2
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 213
    Par défaut
    Hello,
    dans le OnLine Packager il existe la bibliothèque Python4Lazarus qui fonctionne pas mal.
    En pièce jointe un projet qui utilise mpmath avec Python4Lazarus.
    Il faut ajuster les paramètres de PythonEngine pour qu'ils correspondent au Python utilisé :
    Nom : ParamsPythonEngine.png
Affichages : 100
Taille : 31,9 Ko

    voici la partie du code où l'on utilise du code python :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure TForm1.Bt_CalculClick(Sender: TObject);
    var  script  : TStringList;
    begin
    script := TStringList.Create();
    Memo1.Clear;
    Memo1.Append('Calculate  2**0.5');
    script.Add('from mpmath import *');
    script.Add('mp.dps = 50');
    script.Add('print(mpf(2)**mpf(0.5))');
    GetPythonEngine.ExecStrings(script);
    end;
    et voici le résultat :
    Nom : calcMpMath.gif
Affichages : 96
Taille : 18,8 Ko

    Ami calmant, J.P
    Fichiers attachés Fichiers attachés

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 5
    Par défaut Interface Lazarus Python mpmath
    Bonsoir

    Merci Jurassic Pork pour ta réponse. J'ai suivi les instructions et reproduit le script (voir ci-dessous).
    Tout va bien à la compilation. Juste un petit problème : le résultat ne s'affiche pas, GetPythonEngine.ExecStrings(script);
    ne fournit pas une variable string. Comment récupérer le résultat et l'écrire dans Memo1 ?
    C'est probablement évident mais je ne trouve pas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    procedure TForm1.Button1Click(Sender: TObject);
    Var
       script:TStringList;
    begin
       script:= TStringList.Create();
       Memo1.Clear;
       Memo1.Append('Calculate  2**0.5');
       script.Add('from mpmath import *');
       script.Add('mp.dps = 50');
       script.Add('print(mpf(2)**mpf(0.5))');
       GetPythonEngine.ExecStrings(script);
       script.Free;
    end;

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 5
    Par défaut Interface Lazarus Python mpmath
    Bonsoir

    Désolé, je viens de trouver ce qui manquait pour écrire le résultat dans un mémo.
    Il suffisait d'ajouter la propriété Output de PythonGUIInputOutput1 = Memo1.

    Pour moi, le problème reste le même : Je voudrais vraiment obtenir la réponse de mpf(2)**mpf(0.5)
    sous forme d'une variable de type string

  5. #5
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 213
    Par défaut
    Hello,
    effectivement j'avais oublié de dire qu'il fallait aussi modifier la propriété output du PythonGUIInputOutput1 :
    Nom : PythonGUIInputOutput1.png
Affichages : 86
Taille : 18,3 Ko

    En ce qui concerne le résultat dans une variable, j'ai ajouté au projet un composant de type TPythonDelphiVar qui permet de récupérer une valeur dans le python qui est exécuté.
    Ma Variable s'appelle PythonDelphiResult et son nom dans le script python est result :
    Nom : PythonDelphiVar.png
Affichages : 85
Taille : 17,2 Ko
    Dans le nouveau projet le script python à exécuter est maintenant dans un mémo. Voici ce qu'il contient au départ :
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    from mpmath import *
    mp.dps = 50
    result.Value = mpf(2)**mpf(0.5)   
    print(result)
    Quand on exécute le script, quand la valeur de résult change , j'affiche une fenêtre.
    Voici le nouveau code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    procedure TForm1.Bt_CalculClick(Sender: TObject);
    var  script  : TStringList;
    begin
    script := TStringList.Create();
    Memo1.Clear;
    Memo1.Append('Calculate  2**0.5');
    GetPythonEngine.ExecStrings( Memo2.Lines );
    Memo1.Append('PythonDelphiResult = ' + PythonDelphiResult.ValueAsString );
    end;
     
    procedure TForm1.PythonDelphiResultChange(Sender: TObject);
    begin
      with Sender as TPythonDelphiVar do
        ShowMessage( 'Var test changed: ' + ValueAsString );
    end;
    Voici le résultat :
    Nom : TestMpMathV2.gif
Affichages : 82
Taille : 100,5 Ko

    Le nouveau projet en pièce jointe.

    Ami calmant, J.P
    Fichiers attachés Fichiers attachés

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 5
    Par défaut Interface Lazarus Python mpmath
    Un grand merci JP, c'est parfait

Discussions similaires

  1. Erreur interface graphique
    Par jinpol dans le forum Ubuntu
    Réponses: 8
    Dernier message: 05/11/2008, 09h11
  2. Message d'erreur interface graphique swing
    Par oclone dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 16/01/2008, 13h44
  3. Interface et Python
    Par dahtah dans le forum Général Python
    Réponses: 9
    Dernier message: 27/10/2007, 18h18
  4. interface en python
    Par elekis dans le forum Général Python
    Réponses: 8
    Dernier message: 12/09/2007, 16h21
  5. Interface graphique python ds eclipse
    Par Terminator dans le forum GUI
    Réponses: 6
    Dernier message: 23/04/2007, 09h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo