-
Import en cascade
Bonjour,
Je ne sais pas trop comment appeler celà et c'est surement pour ca que je ne trouve rien sur internet.
Je souhaite organiser mon programme python d'une façon particulière, je m'explique:
Je possède un fichier de l'interface graphique qui créer des boutons automatiquement à partir d'une liste de fonction. Cette liste de fonctions est située dans un autre fichier pour plus de clarté. Mais le problème est que ce fichier ne contient que les noms des fonctions, les fonctions sont importé à partir d'un autre fichier qui contient le programme de l'application. Et ce fichier de programme lui même ce sert d'un autre fichier pour inclure des focntions de base.
Pour résumer:
Interface graphique ->import-> list_fonctions ->import-> fonction_haut_niveau ->import-> fonction bas niveau.
j'ai écris les imports de cette manière
Interface graphique : from list_fonctions import *
list_fonctions : from fonction_haut_niveau import *
fonction_haut_niveau: from fonction_bas_niveau import *
Seulement cette chaîne ne fonctionne pas. Lorsque j'inscris une fonction haut niveau dans list fonctions elle est reconnue mais ne se lance pas(je pense car elle appelle des fonctions bas niveau) pas de message d'erreur, seulement le programme cesse de fonctionner correctement.
Lorsque j'appelle directement une fonction bas_niveau dans list_fonction, la fonction n'est pas reconnue.
Je pense que j'ai besoin d'une petite mise au point sur le fonctionnement précis de import dans python. Merci de votre aide. J'espère être assez clair et ne pas avoir fait un doublon.
Cordialement
Jep31
-
Bonjour,
Pourquoi l'interface ne peut-elle importer directement de 'fonction_haut_niveau' ?
Est-ce parce que 'fonction_haut_niveau' contient d'autres fonctions inutiles à l'interface ? Dans ce cas il suffit d'importer les fonctions nommément.
Supprimer le fichier intermédiaire de noms de fonctions n'est qu'une piste, mais aurait le mérite de clarifier les imports.
D'autre part, tes explications laissent entendre que l'interface serait le script '__main__', c'est courant pour de petites applications, mais dès qu'un programe prend de l'ampleur, il est bien d'avoir un '__main__' distinct, alors ton problème d'import ne se poserait plus.
-
Salut,
Désolé, je viens d'être victime du phénomène très courant qui fait que dés que l'on pose la question sur un forum on trouve la réponse et que en plus elle n'avait rien avoir avoir la question... :cry:
En fait un de mes import était mal déterminé. Il importe en effet un fichier qui se trouve dans un autre dossier et le path était mal défini.
En fait je ne possède pas qu'un seul main car j'utilise ROS qui lance plusieurs programme (nodes) en même temps.
J'ai une interface graphique qui possède un main et un programme complètement séparé qui en possède un autre. Les deux peuvent fonctionner indépendamment. Le programme fonctionne sans l'interface graphique et l'interface graphique possède directement quelques fonctions.
L'interface n'importe pas directement les fonctions de hauts niveaux car le fait de les ranger dans une liste automatise la manière de rajouter un bouton.
En fait il suffit d'ouvrir le fichier liste et d'y inscrire le nom de la fonction que l'on veut actionner avec un nouveau bouton qui se rajoute tout seul dans l'interface. Perso je trouve ça très pratique.
Le main de l'interface graphique ne fait que exécuter la classe de l'interface. Apres le tout est géré dans les méthodes de la classe. Je pense ainsi que mon main est bien placé, non ?
Donc pour clore le sujet on me confirme que l'import en cascade comme je l'appelle fonctionne bien ? Si je fais une suite d'import, tout est donc importé dans mon programme le plus haut placé dans la cascade ?