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

Tkinter Python Discussion :

Affichage d'une image à partir de plusieurs sous-images [Python 3.X]


Sujet :

Tkinter Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2019
    Messages : 34
    Par défaut Affichage d'une image à partir de plusieurs sous-images
    Bonjour, j'aimerai savoir comment faire pour créer une image dans un canvas de tkinter à partir de sous images (au format bmp ou autres formats proches).
    Le but serait le suivant :

    1) importer les différentes sous-images (probablement avec quelque chose comme : première image=tk.PhotoImage(file=chemin) etc... )
    2) avoir une matrice qui précise quelles sous-images sont utilisées et à quel emplacement
    3) afficher l'image finale dans le canvas

    Voici ce que j'ai essayé de faire mais ça marche pas comme prévu (à cause des espaces entre les sous-images).
    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
     
    #création de la fenêtre
    import tkinter as tk
    fen=tk.Tk()
     
    #importation des images
    image1=tk.PhotoImage(file='chemin_image1.ppm')
    image2=tk.PhotoImage(file='chemin_image2.ppm')
     
    #création d'un dictionnaire pour pouvoir appeler les sous-images à partir des valeurs de la matrice
    dico={}
    dico["image1"]=image1
    dico["image2"]=image2
     
    #matrice pour l'exemple
    matrice=[["image1","image2"],
             ["image2","image1"]]
     
    #affichage sous-image par sous-image
    for i in range(0,len(matrice): #nombre de lignes
        for j in range(0,len(matrice[1])): #nombre de colonnes (à la ligne 1)
            tk.Label(image=dico[matrice[i][j]]).grid(row=i,column=j)
    Je sais pas si c'est une bonne solution mais c'est ce que j'ai trouvé de plus efficace (même si j'aurai préféré que l'affichage de l'image finale se fasse dans un canvas).
    Comment pourrais-je donc améliorer mon programme ?

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 762
    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 : 21 762
    Par défaut
    Salut,

    Citation Envoyé par thomas18F Voir le message
    Comment pourrais-je donc améliorer mon programme ?
    Si vous voulez afficher des images dans un Canvas, il faut ouvrir la documentation du Canvas à .create_image.
    Et si vous avez des difficultés à comprendre comment l'utiliser, chercher des exemples sur Internet çà aide...

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

  3. #3
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2019
    Messages : 34
    Par défaut
    Salut,

    J'avais déjà essayé avec create image, mais j'obtiens systématiquement l'erreur suivante : image "pyimage2" doesn't exist.
    J'ai essayé de trouver comment résoudre cette erreur sur plusieurs sites mais je ne comprend pas la solution qui est de "conserver une référence de l'image".
    Comme j'avais pas trouvé de solutions, j'avais recherché une autre solution qui est celle présentée dans ma question.

    Au passage, voilà le code avec create image :
    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
    #bibliothèques
    import tkinter as tk
     
    #création de la fenêtre principale
    fen=tk.Tk()
     
    #création du canvas selon les paramètres
    can=tk.Canvas(fen,height=600,width=300)
     
    #images
    image1=tk.PhotoImage(file='chemin_image1.ppm')
    image2=tk.PhotoImage(file='chemin_image2.ppm')
     
    #gestion du dictionnaire
    dico={}
    dico[1]=image1
    dico[2]=image2
     
    #matrice
    matrice=[[1,2],
             [2,1]]
     
    #taille de la matrice
    nbLig=len(matrice)
    nbCol=len(matrice[0])
     
    #affichage sous-image par sous-image
    for i in range(0,nbLig):
        for j in range(0,nbCol):
            can.create_image(i*100,j*100,image=dico[matrice[i][j]])

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 762
    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 : 21 762
    Par défaut
    Salut,

    Citation Envoyé par thomas18F Voir le message
    J'avais déjà essayé avec create image, mais j'obtiens systématiquement l'erreur suivante : image "pyimage2" doesn't exist.
    Ça c'est parce que l'instance de Tk() créée à la ligne 5, n'est pas la seule du programme (ou de l'environnement de développement dans lequel vous travaillez).

    Dans le premier code, ligne 22, ajoutez le master via tk.Label(fen, ...). Vous devriez avoir le même soucis côté image "pyimage2" doesn't exist.
    Pour résoudre çà, il faut que widgets et images soient créés dans la même instance de Tk et non la première instance créée (le défaut) et préciser côté image via image1=tk.PhotoImage(master=fen,...).

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

  5. #5
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2019
    Messages : 34
    Par défaut
    Salut,

    Effectivement le problème est résolu.

    Je fais quelques tests pour voir s'il n'y a aucun problèmes (ou questions complémentaires) et je ferme la discussion.

    Merci pour la vitesse de réponse !

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

Discussions similaires

  1. [xsl-fo]Affichage d'une image à partir d'un blob
    Par cradleofpain dans le forum XSL/XSLT/XPATH
    Réponses: 14
    Dernier message: 18/06/2007, 17h36
  2. affichage d'une image réactive en css sous un menu
    Par criscaro dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 02/12/2006, 12h21
  3. Réponses: 1
    Dernier message: 19/01/2006, 19h36
  4. Affichage d'une image à partir d'un client
    Par Aldur dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 03/01/2006, 10h44
  5. Affichage d'une image sous linux
    Par Braim dans le forum x86 32-bits / 64-bits
    Réponses: 5
    Dernier message: 25/03/2003, 10h41

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