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

Python Discussion :

fonction non reconnue avec des imports


Sujet :

Python

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 4
    Points : 4
    Points
    4
    Par défaut fonction non reconnue avec des imports
    bonjour,
    J'aurais besoin d'un peu d'aide sur les imports !
    j'utilise le logiciel Bankperfect (BP).
    ce logiciel écrit en DELPHI intègre un interpréteur Python (2.35) permettant d'utiliser ses propres scripts.

    Le Script1 est lancé via BP.
    Le script1 importe Script2.
    Script2 doit ouvrir un formulaire avec la méthode CreateComponent habituellement utilisée avec ce logiciel et une méthode DELPHI qui doit être interprétée par le logiciel.

    Je lance Script1 => ça bug !!!
    Je lance Script2 tout seul, ça bug pas !!!
    je comprends pas pourquoi CreateComponent n'est plus reconnu quand on passe par un import (cf message d'erreur plus bas).

    si je suis pas clair, n'hésitez pas
    PLEASE HELP!!!

    script _appelant.py:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    import BP,time,sys,os
    SCRIPT_PATH = "%sScripts\\%s" %(BP.BankPerfectExePath(), SCRIPT_FOLDER)
    if SCRIPT_PATH not in sys.path : sys.path.append(SCRIPT_PATH) #permet d'importer script_appelé
    .......
    def modifyAccount(Self):
    import script _appelé
    script _appelé.mafonction(arguments ....)
    .......
    script _appelé.py:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    import sys,BP
    def mafonction(arguments ...):
    f = CreateComponent("TForm", None)
    .......
    Mon message d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NameError : global name 'CreateComponent' is not defined

  2. #2
    Membre expérimenté Avatar de pacificator
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 074
    Points : 1 728
    Points
    1 728
    Par défaut
    Bonjour et bienvenue sur le forum.

    Essaye en faisant BP.CreateComponent au lieu de CreateComponent seul.
    "Etre conscient de la difficulté permet de l'éviter.."
    Lao-Tseu.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 4
    Points : 4
    Points
    4
    Par défaut souci de global name
    Bonjour,

    le fait de rajouter BP ne fonctionne pas.

    createcomponent n'est pas une fonction du module BP

    createcomponent est par contre accessible depuis le TOP script (celui lancé en premier) mais pas depuis les script importés ...

    le top script est lui même un executable généré depuis delphi, cette executable contient une DLL qui permet de faire le lien entre du code python et delphi.

    dur mais si quelqu'un peut m'aider à utiliser create component depuis mes script importés ....

    mERCI

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2008
    Messages : 141
    Points : 184
    Points
    184
    Par défaut
    Salut !

    Si, dans ton script _appelé.py, tu écris :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    mycreatecomponent = CreateComponent
    tu définiras dans ce script une globale, que tu pourras utiliser de la façon suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    #_appelant.py
    import _appelé
    # ...
    _appelé.mycreatecomponent()
    A tester.

  5. #5
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 049
    Points : 1 380
    Points
    1 380
    Par défaut
    ça ressemble à un problème d'importation croisée ...

  6. #6
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Bonjour,

    Passe le en argument :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    import appel
    appel.autre(CreateComponent)
    appel.py

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    def Commande(event):
        print 'pass'
     
     
    def autre(CreateComponent):
        f = CreateComponent("TForm", None)
     
        f.SetProps(Position="poMainFormCenter", Width=520, Height=300, BorderStyle="bsSingle", BorderIcons=["biSystemMenu","biMinimize"], Caption="Autres")
     
        f.Font.Name = "Tahoma"
     
     
     
        LTitle = CreateComponent("TLabel", f)
     
        LTitle.SetProps(Parent=f, Left=40, Top=30, Caption="")
     
        LTitle.Font.Style = ["fsBold"]
     
     
     
        List = CreateComponent("TListBox", f)
     
        List.SetProps(Parent=f, Left=40, Top=50, Width=430, Height=140, ItemIndex=-1)
     
     
     
        BLocal = CreateComponent("TButton", f)
     
        BLocal.SetProps(Parent=f, Left=40, Top=210, Width=120, Height=25, Caption="Test1", OnClick=Commande)
     
        BFTP = CreateComponent("TButton", f)
     
        BFTP.SetProps(Parent=f, Left=170, Top=210, Width=120, Height=25, Caption="Test2", OnClick=Commande)
     
     
     
        BRestore = CreateComponent("TButton", f)
     
        BRestore.SetProps(Parent=f, Left=300, Top=210, Width=80, Height=25, Caption="Test3", OnClick=Commande)
     
     
     
        BOK = CreateComponent("TButton", f)
     
        BOK.SetProps(Parent=f, Left=390, Top=210, Width=80, Height=25, Caption="Fermer", ModalResult=1, Default=1, Cancel=1)
     
     
     
        f.ShowModal()

    @+

    (petit edit pour l'import...)
    Merci d'utiliser le forum pour les questions techniques.

Discussions similaires

  1. Utiliser des fonctions non objets avec Zend
    Par jux dans le forum Zend Framework
    Réponses: 6
    Dernier message: 08/02/2009, 11h58
  2. strlen et strcpy non reconnu avec string.h
    Par wolflinger dans le forum C++
    Réponses: 17
    Dernier message: 21/02/2006, 13h44
  3. Réponses: 5
    Dernier message: 26/01/2006, 15h13
  4. [LDAP] Fonctions non reconnues
    Par Wormus dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 10/01/2006, 13h46
  5. [Configuration] Installation de PHP + Pbm de fonctions non reconnues
    Par BARBIER dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 12
    Dernier message: 23/11/2005, 10h54

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