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'affichage d'une image


Sujet :

Tkinter Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mai 2009
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 33
    Par défaut problème d'affichage d'une image
    bonsoir,
    je rencontre un problème lors de l'affichage d'une image (format GIF) avec Tkinter

    Voici le code de la fenêtre principale :

    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
    31
    32
    33
    34
    35
    36
    37
    38
    from Tkinter import *
    from afficher_Karte import *
     
    def Fenetre_Principale():
        lpcr = Tk()
        lpcr.geometry("950x550") 
        lpcr.title("LE Grand Mechant CHAPERON ROUGE")
     
        # Création de la barre de menu:
        menu1 = Menu(lpcr)
        # Création du menu fichier:
        fichier = Menu(menu1, tearoff=0)
        menu1.add_cascade(label="Menu",menu=fichier)
        fichier.add_command(label="Quiter", command=lpcr.quit)
        fichier.add_command(label="Sauvegarder", command=lpcr.quit)
        fichier.add_command(label="Charger", command=lpcr.quit)
     
        sac = Menu(menu1, tearoff=0)
        menu1.add_cascade(label="Sac",menu=sac)
     
        opsac = Menu(sac, tearoff=0)
        sac.add_command(label="Ouvrir sac", command=ouvertureFenetreSac)
     
        cart = Menu(menu1, tearoff=0)
        menu1.add_cascade(label="Carte de la foret",menu=cart)
     
        zone1 = Canvas(lpcr, height =500, width =800, bg ='ivory')
        zone2 = Canvas(lpcr, height=20, width=80, bg = "ivory")
     
        cart.add_command(label="Afficher la carte", command=afficher_carte)
     
        bou1= Button (lpcr, text="Quitter", command = lpcr.destroy)
        bou1.pack(side =BOTTOM, padx =10)   
     
        # afficher le menu
        lpcr.config(menu=menu1)
        lpcr.mainloop()
        return



    et le code qui gère l'affichage de l'image :


    from Tkinter import *


    def afficher_carte():
    fenCarte1 = Tk ()

    fenCarte1.geometry("850x550")
    fenCarte1.title("Carte")

    tex1 = Label (fenCarte1, text = '*** Voici la carte du jeu *** ', fg='red', width=250)
    tex1.pack(side =TOP, padx =10)

    bou1= Button (fenCarte1, text="Quitter la carte du monde. ", command = fenCarte1.destroy)
    bou1.pack(side =BOTTOM, padx =10)

    zone = Canvas(fenCarte1, width =800, height =500, bg ='ivory')
    zone.pack()
    photo = PhotoImage(file ='carte_foret.gif')
    item = zone.create_image(400, 250, image =photo)

    fenCarte1.mainloop()
    return
    voilà!c'est très urgent !!
    merci d'avance

  2. #2
    Membre Expert 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
    Par défaut
    Bonsoir,

    Avec les balises codes c'est mieux pour avoir une réponse rapide

    Et c'est quoi ton souci ? Cela aussi çà aide.

    Connais tu Toplevel ?
    Pense à donner le chemin complet au cas où (regarde du coter de os.getcwd).
    Tu y tien à tes return

    Edit : tu utilise quoi dans pygame ?

  3. #3
    Membre averti
    Inscrit en
    Mai 2009
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 33
    Par défaut
    pour le pygame c'est une erreur

    le problème c'est l'image qui ne s'affiche pas quand je clique sur le bouton "Afficher carte" une fois la fenêtre principale lancée.

  4. #4
    Membre averti
    Inscrit en
    Mai 2009
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 33
    Par défaut
    voilà ce qu'i s'affiche dans le shell :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    >>> 
    >>> Fenetre_Principale()
    Exception in Tkinter callback
    Traceback (most recent call last):
      File "C:\Python25\lib\lib-tk\Tkinter.py", line 1414, in __call__
        return self.func(*args)
      File "C:\Users\Mehdi\Desktop\MDD _ Chaperon Rouge\afficher_Karte.py", line 26, in afficher_carte
     
      File "C:\Python25\lib\lib-tk\Tkinter.py", line 2166, in create_image
        return self._create('image', args, kw)
      File "C:\Python25\lib\lib-tk\Tkinter.py", line 2157, in _create
        *(args + self._options(cnf, kw))))
    TclError: image "pyimage2" doesn't exist

  5. #5
    Membre Expert 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
    Par défaut
    Bonsoir,

    En vrac (bon courage):

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    #!/usr/bin/env python
    # -*- coding: ISO8859-1 -*-
    #
    #
    from Tkinter import *
     
    class Mes_Globals():
        MonPlan = None
     
     
    def afficher_carte():
     
        Mes_Globals.MonPlan = PhotoImage(file ='carte_foret.gif')
     
        fenCarte1 = Toplevel()
     
        fenCarte1.geometry("%dx%d+%d+%d" % (850, 550, (fenCarte1.winfo_screenwidth()-850)/2, (fenCarte1.winfo_screenheight()-550)/2 ) )
        fenCarte1.title("Carte")
     
        tex1 = Label(fenCarte1, text = '*** Voici la carte du jeu *** ', fg='red', width=250)
        tex1.pack(side =TOP, padx =10)
     
        bou1= Button (fenCarte1, text="Quitter la carte du monde. ", command = fenCarte1.destroy)
        bou1.pack(side =BOTTOM, padx =10)
     
        zone = Canvas(fenCarte1, width =800, height =500, bg ='ivory')
        zone.pack()
        zone.create_image(400, 250, image=Mes_Globals.MonPlan)
     
    def Fenetre_Principale():
        lpcr = Tk()
        lpcr.geometry("%dx%d+%d+%d" % (950, 550, (lpcr.winfo_screenwidth()-950)/2, (lpcr.winfo_screenheight()-550)/2 ) )
        lpcr.title("LE Grand Mechant CHAPERON ROUGE")
     
        # Création de la barre de menu:
        menu1 = Menu(lpcr)
        # Création du menu fichier:
        fichier = Menu(menu1, tearoff=0)
        menu1.add_cascade(label="Menu",menu=fichier)
        fichier.add_command(label="Quiter", command=lpcr.quit)
        fichier.add_command(label="Sauvegarder", command=lpcr.quit)
        fichier.add_command(label="Charger", command=lpcr.quit)
     
        cart = Menu(menu1, tearoff=0)
        menu1.add_cascade(label="Carte de la foret",menu=cart)
     
        zone1 = Canvas(lpcr, height =500, width =800, bg ='ivory')
        zone2 = Canvas(lpcr, height=20, width=80, bg = "ivory")
     
        cart.add_command(label="Afficher la carte", command=afficher_carte)
     
        bou1= Button (lpcr, text="Quitter", command = lpcr.destroy)
        bou1.pack(side =BOTTOM, padx =10)
     
        # afficher le menu
        lpcr.config(menu=menu1)
        lpcr.mainloop()
     
    Fenetre_Principale()
    @+

    Edit pour supprimer from afficher_Karte import * inutile puisque def afficher_carte(). A toi de voir si afficher_Karte comporte d'autres def

  6. #6
    Membre Expert 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
    Par défaut
    Bonjour,

    Pour mieux répondre à ta question c'est une perte de référence du fait de plusieurs instances Tk.
    Mais c'est vrais que j'y vais un peu fort avec ma classe...

    Voici quelque chose de plus 'propre' (self)

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    #!/usr/bin/env python
    # -*- coding: ISO8859-1 -*-
    #
    #
    from Tkinter import *
     
    class Fenetre_Principale(Tk):
     
        def afficher_carte(self):
            self.fenCarte1 = Toplevel()
     
            self.fenCarte1.geometry("%dx%d+%d+%d" % (850, 550, (self.fenCarte1.winfo_screenwidth()-850)/2, (self.fenCarte1.winfo_screenheight()-550)/2 ) )
            self.fenCarte1.title("Carte")
     
            self.tex1 = Label(self.fenCarte1, text = '*** Voici la carte du jeu *** ', fg='red', width=250)
            self.tex1.pack(side =TOP, padx =10)
     
            self.bou1= Button (self.fenCarte1, text="Quitter la carte du monde.", command = self.fenCarte1.destroy)
            self.bou1.pack(side =BOTTOM, padx =10)
     
            self.zone = Canvas(self.fenCarte1, width =800, height =500, bg ='ivory')
            self.zone.pack()
            self.MonPlan = PhotoImage(file ='carte_foret.gif')
            self.zone.create_image(400, 250, image=self.MonPlan, anchor='nw')
     
        def ouvertureFenetreSac(self):
            print 'la suite'
     
        def __init__(self, parent):
            Tk.__init__(self,parent)
            self.parent = parent
            self.initialize()
     
        def initialize(self, event = None):
            self.geometry("%dx%d+%d+%d" % (950, 550, (self.winfo_screenwidth()-950)/2, (self.winfo_screenheight()-550)/2 ) )
            # self.title("LE Grand Mechant CHAPERON ROUGE")
     
            # Création de la barre de menu:
            self.menu1 = Menu(self)
            # Création du menu fichier:
            self.fichier = Menu(self.menu1, tearoff=0)
            self.menu1.add_cascade(label="Menu",menu=self.fichier)
            self.fichier.add_command(label="Quitter", command=self.quit)
            self.fichier.add_command(label="Sauvegarder", command=self.quit)
            self.fichier.add_command(label="Charger", command=self.quit)
     
            self.sac = Menu(self.menu1, tearoff=0)
            self.menu1.add_cascade(label="Sac", menu=self.sac)
     
            self.opsac = Menu(self.sac, tearoff=0)
            self.sac.add_command(label="Ouvrir sac", command=self.ouvertureFenetreSac)
     
            self.cart = Menu(self.menu1, tearoff=0)
            self.menu1.add_cascade(label="Carte de la foret", menu=self.cart)
     
            self.zone1 = Canvas(self, height =500, width =800, bg ='ivory')
            self.zone2 = Canvas(self, height=20, width=80, bg = "ivory")
     
            self.cart.add_command(label="Afficher la carte", command=self.afficher_carte)
     
            self.bou1= Button (self, text="Quitter", command = self.destroy)
            self.bou1.pack(side =BOTTOM, padx =10)
     
            # afficher le menu
            self.config(menu=self.menu1)
     
    if __name__ == '__main__':
        app = Fenetre_Principale(None)
        app.title('.:: LE Grand Mechant CHAPERON ROUGE ::.')
        app.mainloop()
    Toutefois si tu compte garder ton code :

    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
    #!/usr/bin/env python
    # -*- coding: ISO8859-1 -*-
    #
    #
    from Tkinter import *
    
    def afficher_carte():
        fenCarte1 = Toplevel () # Et non Tk
    
        fenCarte1.geometry("850x550")
        fenCarte1.title("Carte")
    
        tex1 = Label(fenCarte1, text = '*** Voici la carte du jeu *** ', fg='red', width=250)
        tex1.pack(side =TOP, padx =10)
    
        bou1= Button (fenCarte1, text="Quitter la carte du monde. ", command = fenCarte1.destroy)
        bou1.pack(side =BOTTOM, padx =10)
    
        zone = Canvas(fenCarte1, width =800, height =500, bg ='ivory')
        zone.pack()
        photo=PhotoImage(file="mur.gif")
        item = zone.create_image(400, 250, image=photo)
        zone.item = photo # Pour garder la référence
        # Et pas de mainloop bien sur
    @+

    Edit : Pour mettre de la couleur

Discussions similaires

  1. Problème d'affichage d'une image avec Glade.
    Par tistri dans le forum GTK+ avec C & C++
    Réponses: 2
    Dernier message: 21/04/2007, 18h56
  2. Problème d'affichage d'une image GIF
    Par michaeljeru dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 01/04/2007, 10h27
  3. Problème d'affichage d'une image
    Par parano dans le forum C++
    Réponses: 12
    Dernier message: 21/03/2007, 18h57
  4. problème d'affichage d'une image au format DDS (24-bit)
    Par thunderbird dans le forum DirectX
    Réponses: 2
    Dernier message: 22/03/2006, 11h00
  5. [GD] Problème d'affichage d'une image avec gd2
    Par turini dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 04/10/2005, 11h59

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