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 :

Problème d'insertion d'images dans mon interface graphique


Sujet :

Tkinter Python

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2012
    Messages : 39
    Points : 25
    Points
    25
    Par défaut Problème d'insertion d'images dans mon interface graphique
    Bonjour,
    je reviens vers vous car j'ai un souci pour introduire une image dans mon interface graphique. Ce genre de sujet a déjà été abordé mais je n'ai pas réussi à résoudre mon problème même en regardant attentivement les solutions à ce problème.

    je voulais insérer une image au format gif dans mon interface graphique quand j'appui sur le bouton valider:
    parti du code concerné sachant que c'est uniquement une partie du programme (qui crée
    une interface avec des label, bouton etc):




    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    def Valider() :
     
    root.__can1=tkinter.Canvas(root,width=80,height=80,bg='white')
    root.__images=[]
    root.__images.append(tkinter.PhotoImage(file='/Documents and 
    Settings/radiophysique/Bureau/tick.gif',master=root))
    root.__can1.create_image(40,40,image=root.__images[0])
    root.__can1.grid(column=compteur_faisceaux+1, row=7) #emplacement du canvas
     
    #on créer le bouton Enregistrement
    bouton_valider = tkinter.Button(root, bg='violet', text='Validation', command = 
    Valider)
    bouton_valider.grid(column=compteur_faisceaux+1, row=4) #emplacement du bouton
    Mais en faisant çà j'obtiens un message d'erreur qui est
    image"pyimage1" doesn't exist

    alors que je n'ai pas appelé de pyimage1...

    J'ai lu sur ce même forum que çà serait dû à plusieurs fenêtre Tk() ouvertes mais je ne comprend pas comment je peux résoudre çà puisque je veux intégrer mon image à CETTE fenêtre qui est mon interface; je ne veux pas que mon image soit dans une fenêtre à part...

    Si vous pouviez une nouvelle fois me décoincer...

    Merci d'avance

  2. #2
    Membre expérimenté
    Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    Juin 2010
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 077
    Points : 1 742
    Points
    1 742
    Par défaut
    Salut le python Tkinter d'insertion d'image,
    J'ai tester ton code et avec une petite modification j'ai réussi a le faire marché: je suis sous Linux et je connait la technique de l'instance de l'image dans un tableau avec le module PIL et sa classe ImageTk qu'il fallait faire avant l'apparition dans Tkinter de la méthode PhotoImage. Mais assez parler mon code est le suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    import Tkinter as tk
    a=tk.Tk()
    b=tk.Canvas(a,width=800,height=600,bg='white')
    c=[tk.PhotoImage(file='/home/mon_nom/chemin/vers/image.gif')]
    b.create_image((400,300),image=c[0]) # les coordonnées dans un tuple 
    b.pack()
    a.mainloop()
    Je pense pas que ce soit la solution a ton problème car il semble venir de l'instance de ton image mais j'ai essayer le code précédent qui fonctionne, chez moi.
    Le Traceback avec pyimage est du a un problème d'instance du fichier image ce n'est pas une question de nom de l'image je pense, il faudrait peut être essayer avec d'autres méthodes de création d'instance de fichier image, par exemple a l'ancienne avec le module PIL...
    a toi de voir.

  3. #3
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2012
    Messages : 39
    Points : 25
    Points
    25
    Par défaut
    non çà ne marche pas car j'ai plusierus fenêtre tk ouverte... Comment faire pour dire à python que je veux mettre mon image dans cette fenêtre et pas dans une autre???
    merci d'avance

  4. #4
    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,

    Et bien pour les fenêtres secondaires vous utilisez des Toplevel et non une nouvelle instance Tk(). C'est fait pour.

    @+

  5. #5
    Membre expérimenté
    Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    Juin 2010
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 077
    Points : 1 742
    Points
    1 742
    Par défaut
    Salut le python,
    A mon dernier post j'ai était un peu vague car tu a dit que avait fait des recherches sur le sujet:
    J'ai lu sur ce même forum que çà serait dû à plusieurs fenêtre Tk()
    alors je ne suis aller droit au but mais je t'ai donner une piste, le code suivant est disont, corriger moi si je me trompe, relativement a l'ancienne car il passe par le module PIL pour obtenir une instance de fichier image que voici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    # -*- coding: utf-8 -*-
     
    import Tkinter as tk
    from PIL import Image,ImageTk
    a=tk.Tk()
    b=tk.Canvas(a,width=800,height=600,bg='white')
    pil_img_open_file=Image.open('/chemin/vers/images.gif') #ouverture du fichier image
    pil_imagetk_instance=[ImageTk.PhotoImage(image=pil_img_open_file)] #création d'une instance ImageTk.PhotoImage
    #dans un tableau afin de garder l'instance 
    #je ne sais si ca correspond exactement a tk.PhotoImage() mais ca fonctionne
    b.create_image((400,300),image=pil_imagetk_instance[0]) # les coordonnées dans un tuple 
    b.pack()
    a.mainloop()

  6. #6
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2012
    Messages : 39
    Points : 25
    Points
    25
    Par défaut
    Bonjour Luke spywoker

    J'ai réussi à insérer mon image en utilisant PIL et en insérant mon image non pas dans une fenêtre Tk() mais dans un toplevel

  7. #7
    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,

    Vu que c'est un gif PhotoImage aurais était préférable, surtout que vous travaillez sous Python 3.x et que de ce fait votre PIL ne doit pas être un portage officiel...
    De plus l'erreur venais de l'utilisation de plusieurs instances Tk. Le fait d'utiliser des Toplevel aurais suffit.
    Pour votre erreur voir ici.

    @+

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 347
    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 347
    Points : 36 870
    Points
    36 870
    Par défaut
    Salut,

    Je suis d'accord avec les arguments de PauseKawa, je voudrais juste apporter un autre éclairage.

    La création d'une instance Tk correspond à la création d'une "application" TK.
    tkinter n'interdit pas la création de plusieurs instances (i.e "application") Tk.
    Mais intuitivement, on "sent" qu'associer une "application" Python à plusieurs "applications" TK faisant désordre côté "sens commun" demandera quelques précisions.

    Si Valider doit afficher une boite de dialogue, ce sera une boîte de dialogue d'une application et non une application à part entière. C'est en cela, que le widget Toplevel sera plus approprié.

    Associer à plusieurs "applications" Tk à une "application" Python n'est pas interdit. Il faut juste prendre les précautions qui vont avec:
    • Démarrer une autre application Tk après avoir "fermé" (.destroy) la précédente.
    • Appeler tk.NoDefaultRoot(), si plusieurs applications Tk pourront exister "en même temps". Cela inhibe la notion de "master par défaut".


    - W

  9. #9
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2012
    Messages : 39
    Points : 25
    Points
    25
    Par défaut
    Salut

    Merci pour vos précisions. J'ai finalement utilisé des Toplevels et PhotoImage.

    Merci beaucoup pour votre aide. Et merci de vous être intéressés à mes problèmes

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

Discussions similaires

  1. Problème d'insertion d'image dans un document latex (utilisant TeXnicCenter)
    Par Lyna77 dans le forum Tableaux - Graphiques - Images - Flottants
    Réponses: 5
    Dernier message: 22/04/2011, 08h29
  2. j'arrive pas a afficher inserer une image dans mon interface
    Par safa baccouche dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 02/09/2009, 05h04
  3. [PHP/SQL] Problème d'insertion d'image dans SQL SERVEUR
    Par Joelatack dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 24/07/2009, 14h28
  4. Problème d'insertion d'image dans un tableau
    Par aminos40 dans le forum Tableaux - Graphiques - Images - Flottants
    Réponses: 2
    Dernier message: 01/06/2007, 09h54
  5. Problème d'insertion d'image dans une fenêtre.
    Par Antigonos Ier Gonatas dans le forum Tkinter
    Réponses: 2
    Dernier message: 26/08/2006, 12h44

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