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

Programmation multimédia/Jeux Python Discussion :

Chemin relatif pour charger une image [Python 3.X]


Sujet :

Programmation multimédia/Jeux Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Amateur
    Inscrit en
    août 2021
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Amateur

    Informations forums :
    Inscription : août 2021
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Chemin relatif pour charger une image
    Bonjour

    Par avance désolé si je massacre des termes techniques, j'ai commencé la programmation il y a trois semaines...

    Le contexte : j'ai créé une interface graphique avec TKinter pour un projet de simulation d'un modèle de clavier MIDI.

    Tout fonctionne parfaitement sauf un truc : pour le background, je charge une image de clavier, et quand je compile, le fichier n'est trouvable QUE si j'entre le chemin absolu.

    En gros, ce qui devrait marcher (et qui ne marche pas):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    clavier = PhotoImage(file="CLAVIER.png")
    et ce qui marche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    clavier = PhotoImage(file="G:\CODE\PROJETS\ARPEGGION\ARPSIM\CLAVIER.png")
    Pourtant, mon script (fichier *****.py) et l'image sont bien dans le même dossier.
    J'ai essayé avec un autre format d'image (.gif) en mettant seulement un bout du chemin dans le nom de fichier, rien n'y fait. Seul le chemin absolu marche.
    J'ai aussi essayé en déplaçant le fichier et le script dans un autre dossier, même résultat.
    Enfin, j'ai essayé de tester de charger l'image via une autre bibliothèque (pygame), et j'ai exactement le même problème !

    Je commence à bloquer... Et j'aimerais bien trouver une solution pour pouvoir envoyer mon code plus facilement aux gens autour de moi.

    Dernière précision, si ça peut aider, mon IDE est Atom (qui est installé sur mon disque C:, alors que le script est enregistré sur mon disque G:, mais à priori ça ne devrait pas poser problème)

    Si vous avez des pistes de solution je suis preneur :3

    Si ça peut aider, j'écris

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    octobre 2008
    Messages
    4 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : octobre 2008
    Messages : 4 203
    Points : 6 614
    Points
    6 614
    Par défaut
    Salut,

    Par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    >>> here = os.getcwd()
    >>> uri = os.path.join(here, "CLAVIER.png")
    >>> uri
    '/home/vincent/CLAVIER.png'
    Correction, après coup je déduis que tu n'es pas dans ton dossier de travail, alors utilise plutôt __file__.
    Comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    uri = os.path.join(os.path.dirname(__file__),  "CLAVIER.png")

  3. #3
    Membre éprouvé
    Inscrit en
    février 2003
    Messages
    1 226
    Détails du profil
    Informations forums :
    Inscription : février 2003
    Messages : 1 226
    Points : 1 270
    Points
    1 270
    Par défaut
    Peut être pourrais-tu utiliser des variables d'environnement pour tes fichiers externes dont ton script Python a besoin.

  4. #4
    Candidat au Club
    Homme Profil pro
    Amateur
    Inscrit en
    août 2021
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Amateur

    Informations forums :
    Inscription : août 2021
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Merci pour les réponses rapides !

    Par contre, ça fait appel à des éléments qui dépassent mes connaissances de néophyte ^^'

    Il va falloir que je me renseigne sur les variables d'environnement, aucune idée de comment ça fonctionne.

    Par contre, quand j'essaye la ligne de code que tu me proposes, j'ai l'erreur "name 'os' is not defined"... Il faut importer quelque chose au préalable ?

  5. #5
    Membre éprouvé
    Inscrit en
    février 2003
    Messages
    1 226
    Détails du profil
    Informations forums :
    Inscription : février 2003
    Messages : 1 226
    Points : 1 270
    Points
    1 270
    Par défaut
    Pour la lib os, il faut effectivement l'importer dans ton script

    Et pour les variables d'environnement, dans le cadre de mon travail je procède comme suit :

    1) un fichier nommé ".env" contenant tes variables d'environnement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    VAR1=ce dont j'ai besoin de stocker ici
    VAR2=ce dont j'ai besoin de stocker ici
    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INPUT_DIR=/source/input
    OUTPUT_DIR=/source/outpu
    Avec l'utilitaire pip, tu installes python-dotenv :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pip install python-dotenv
    Ensuite, dans ton script Python principal, il suffit de rajouter ces trois lignes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    from os import environ
    from dotenv import load_dotenv # importe la méthode load_dotenv() de la lib
     
    load_dotenv() # charge les variables d'environnement
    Pour afficher le contenu de la variable INPUT_DIR par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print(environ['INPUT_DIR'])
    renverra

    Attention toutefois au nommage des variables d'environnement (envvars dans le jargon usuel). USERNAME par exemple, c'est déjà alloué (sous Windows tout du moins) dans les envvars du système car c'est ton identifiant lorsque tu te connectes à ta session Windows.

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    juin 2008
    Messages
    18 408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 18 408
    Points : 31 818
    Points
    31 818
    Par défaut
    Citation Envoyé par Arioch Voir le message
    Peut être pourrais-tu utiliser des variables d'environnement pour tes fichiers externes dont ton script Python a besoin.
    Ce n'est pas un fichier externe (créer par l'utilisateur dans un répertoire de travail à lui) mais un fichier "interne" à l'application qui est dans le répertoire du script principal qu'on récupère via __file__ (variable globale fabriquée par Python juste pour çà).

    Pourquoi avoir une variable externe qu'il faudra checker si çà ne marche pas dans un espace de noms déjà bien encombré?

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

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

Discussions similaires

  1. Réponses: 13
    Dernier message: 02/11/2015, 16h37
  2. [CS5] Problème pour charger une image en fond
    Par Poulki dans le forum ActionScript 3
    Réponses: 4
    Dernier message: 18/11/2010, 10h11
  3. mémoire insuffisante pour charger une image
    Par benj63 dans le forum C++Builder
    Réponses: 3
    Dernier message: 07/11/2007, 18h22
  4. Réponses: 5
    Dernier message: 14/05/2006, 12h57

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