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 :

Interface et code séparés [Fait]


Sujet :

Python

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 56
    Par défaut Interface et code séparés
    Bonjour à tous,

    J'ai voulu créer une interface dans un fichier py et mettre le code dans un autre fichier py. J'ai créer des imports pour les deux fichiers, DANS les deux fichiers.

    Mais quand j'essaie d'appeller une fonction qui se trouve dans l'autre fichier, j'obtiens un message d'erreur suivant:

    exceptions.NameError: name 'erCalcul' is not defined

    erCalcul étant la fonction, bien sûr.

    Y a t il moyen d'y remédier ou faut-il toujours mettre le code de l'interface dans le même fichier py que le code proprement dit ?

    a+
    Eric

  2. #2
    Membre chevronné
    Avatar de richard
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2002
    Messages : 475
    Par défaut
    J'ai voulu créer une interface dans un fichier py et mettre le code dans un autre fichier py. J'ai créer des imports pour les deux fichiers, DANS les deux fichiers.
    Comprends pas. L'implémentation ne peut pas appeler l'interface que je sache ?

    Aurais-tu un exemple ?

  3. #3
    Membre averti
    Inscrit en
    Septembre 2006
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 24
    Par défaut
    Admettons que tu ais 2 fichiers:
    - mon_interface.py
    - mon_programme.py

    Pour utiliser des fonctions que se trouve dans mon_programme.py DEPUIS mon_interface.py, il suffit d'écrire dans mon_interface.py:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    import mon_programme
    Ensuite lorsque tu appeles la fonction ma_fonction() contenu dans mon_programme.py

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    mon_programme.ma_fonction()
    Et voilà!

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 56
    Par défaut
    Pour répondre à Richard:

    En fait, je lancais l'interface et le code suivait. Mais je suis revenu à la méthode traditionnel car j'ai trop de problème à résoudre en faisant ainsi et comme je débute dans la programmation ! Mais je reviendrai à ce problème une fois que j'aurai fini le live de Swinnen.

    Pour répondre à Tz-Ba:
    J'avais essayé mais cela ne fonctionnait pas... j'ai replacé le code de l'interface dans le même fichier que le code. Je referai des essais quand je serai plus instruit en programmation. Je reposterai le code dans le forum une fois que tout sera ok.

    Merci à tout les deux,
    a+, Eric

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 56
    Par défaut
    J'ai deux fichier py.
    Le premier est le principal, le second c'est pour entrer une date

    le premier c'est tpinterf.py
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    from entrerDates import * #fenêtre d'entrée du premier jour
    le second c'est entrerDates.py
    Dans une fonction faisant partie de entrerDates.py, je voudrais appeller une fonction se trouvant dans tpinterf.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
     
    def verifMois(event):
    	global mois
    	"vérifie que le mois bien un chiffre de 1 à 12 et que le nombre de jour correspond au mois donné"
    	#
    	mois = int(editMois.get())
    	#
    	if (mois >= 1) or (mois <= 12):
    		#
    		date = int(editDate.get())
    		#
    		tpinterf.erJourDansMois()
    		#
    		if x =="false":
    			tkMessageBox.showerror("Erreur","Le nombre de jour ne correspond pas au mois donné")
    			editDate.delete(0,0)
     
    	else:
    		tkMessageBox.showerror("Erreur","Le mois doit être un chiffre de 1 à 12 inclus")
    		editMois.delete(0,10)
    j'ai essayé avec "tpinterf." mais cela me donne le message suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    C:/Python25/pythonw.exe -u  "C:/Sources Python/TempsParcours/entrerDates.py"
    Exception in Tkinter callback
    Traceback (most recent call last):
      File "C:\Python25\Lib\lib-tk\Tkinter.py", line 1403, in __call__
        return self.func(*args)
      File "C:\Sources Python\TempsParcours\entrerDates.py", line 73, in verifMois
        tpinterf.erJourDansMois()
    AttributeError: 'module' object has no attribute 'erJourDansMois'
    Et sans ajouté "tpinterf." j'ai le message suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    C:/Python25/pythonw.exe -u  "C:/Sources Python/TempsParcours/entrerDates.py"
    Exception in Tkinter callback
    Traceback (most recent call last):
      File "C:\Python25\Lib\lib-tk\Tkinter.py", line 1403, in __call__
        return self.func(*args)
      File "C:\Sources Python\TempsParcours\entrerDates.py", line 73, in verifMois
        erJourDansMois()
    NameError: global name 'erJourDansMois' is not defined
    Mais j'y vois pas plus clair

  6. #6
    Expert confirmé
    Avatar de Guigui_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2002
    Messages : 1 864
    Par défaut
    A mon avis, le problème vient de l'importation circulaire ( => http://www.developpez.net/forums/sho...ion+circulaire ) qui est possible mais souvent ca foire parce que on ne maîtrise pas complètement l'ordre d'instanciation des variables/fonctions

  7. #7
    Membre confirmé Avatar de zabibof
    Inscrit en
    Février 2007
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 188
    Par défaut
    Citation Envoyé par EricStib
    J'ai deux fichier py.
    Le premier est le principal, le second c'est pour entrer une date

    le premier c'est tpinterf.py
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    from entrerDates import * #fenêtre d'entrée du premier jour
    le second c'est entrerDates.py
    Dans une fonction faisant partie de entrerDates.py, je voudrais appeller une fonction se trouvant dans tpinterf.py
    Si j'ai bien compris ton script, ton programme principal est tpinterf.py et ce programme fait appel à un module entrerDates.py qui, lui-même fait appel à une fonction dans tpinterf. Si c'est le cas, ton problème vient peut-être du fait que tu veut appeler un module(tpinterf) qui contient lui une fonction principale. Avant d'ecrire la fonction principale dans tpinterf ecrit la ligne suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if __name__=="__main__":
        # ton programme
        # n'oublie pas l'indentation
    Je ne sais pas si tu as déjà ecrit cette ligne mais à mon avis, ton problème vient de là.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 56
    Par défaut
    Bon, j'ai dû sauter un paragraphe du cours de Swinnen

    Il est clair que je ne maîtrise vraiment pas le sujet !

    Je vais laisser mon projet de côté pendant un petit temps et m'informer sur l'utilisation de 2 fenêtres avec Tkinter

    "A vouloir allez trop vite on finit par percuter le mur plus vite !"

    Merci pour les infos,
    a+ Eric

  9. #9
    Membre confirmé Avatar de zabibof
    Inscrit en
    Février 2007
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 188
    Par défaut
    Citation Envoyé par EricStib
    Bon, j'ai dû sauter un paragraphe du cours de Swinnen

    Il est clair que je ne maîtrise vraiment pas le sujet !

    Je vais laisser mon projet de côté pendant un petit temps et m'informer sur l'utilisation de 2 fenêtres avec Tkinter

    "A vouloir allez trop vite on finit par percuter le mur plus vite !"

    Merci pour les infos,
    a+ Eric
    Moi aussi j'ai lu le tuto de Swinnen, il en parle dans le chapitre Classes,Méthodes,Héritages dans le paragraphe Modules contenant des librairies de classes

  10. #10
    Membre éprouvé Avatar de csbilouze
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    79
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 79
    Par défaut
    salut,

    dis zabibof qu appelles tu la fonction principale de tpinterf ? c'est lorsque justement tu as finis de définir tes fonction et que tu codes le "corp" du programme que tu mets if __name__="__main__ " (le main en fait lol)

    Tu vois tu n as pas été le seul EricStib a "sauter" le passage lol

    merci,

    ++

  11. #11
    Membre confirmé Avatar de zabibof
    Inscrit en
    Février 2007
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 188
    Par défaut
    Citation Envoyé par csbilouze
    dis zabibof qu appelles tu la fonction principale de tpinterf ? c'est lorsque justement tu as finis de définir tes fonction et que tu codes le "corp" du programme que tu mets if __name__="__main__ " (le main en fait lol)
    Exact!
    Par ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    # tpinterf
    def erJourDansMois():
         # .....
     
    # main
    if __name__:"__main__":
         # .....

  12. #12
    Membre éprouvé Avatar de csbilouze
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    79
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 79

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Interfacer du code C++ avec MATLAB
    Par lefevrelaumonier dans le forum MATLAB
    Réponses: 3
    Dernier message: 11/11/2012, 07h05
  2. [Fortran 90] Interface graphique-Code
    Par ParmenionGiant dans le forum Fortran
    Réponses: 1
    Dernier message: 21/04/2012, 07h22
  3. Conception interface graphique / code metier
    Par Johor dans le forum MVC
    Réponses: 0
    Dernier message: 01/01/2012, 18h48
  4. interfacer un code asm en programme en C
    Par ifdo7a dans le forum C
    Réponses: 2
    Dernier message: 25/01/2011, 19h37
  5. [DEBUG] Found No Interfaces. Generating Code for Types
    Par Battosaiii dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 18/08/2006, 15h26

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