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

Python Discussion :

Canvas Tkinter image introuvable


Sujet :

Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2014
    Messages : 14
    Points : 21
    Points
    21
    Par défaut Canvas Tkinter image introuvable
    Bonsoir,

    Je viens quémander une fois de plus votre précieuse aide..
    En effet une amie se trouve devant un grand souci avec un de ses problèmes... Le code est bizarrement construit et je ne trouve pas l'origine de l'erreur...


    Normalement en lançant le programme et en cliquant sur "fiches SVT", un canevas avec une image devrait s'ouvrir, mais non la fenêtre créée est vide, de plus l'erreur est indiqué :
    Exception in Tkinter callback
    Traceback (most recent call last):
    File "C:\Python34\lib\tkinter\__init__.py", line 1482, in __call__
    return self.func(*args)
    File "C:\Documents and Settings\Matthieu\Bureau\aaa\Projet (3).py", line 23, in fen5
    can.create_image(250,250,image=ima1)
    File "C:\Python34\lib\tkinter\__init__.py", line 2291, in create_image
    return self._create('image', args, kw)
    File "C:\Python34\lib\tkinter\__init__.py", line 2282, in _create
    *(args + self._options(cnf, kw))))
    _tkinter.TclError: image "pyimage1" doesn't exist
    Pourtant l'image existe bien, et est dans le même dossier !
    et en isolant juste la partie du code, le code fonctionne...
    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
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    from tkinter import*
    import os
     
    fen=Tk()
    def fen2(): #fenêtre du Quiz de Maths
        fen2=Tk()
        fen2.geometry("500x500")
        fen2.title("Mathématiques, Quiz")
    def fen3(): #fenêtre des fiches de Maths
        fen3=Tk()
        fen3.geometry("500x500")
        fen3.title("Mathématiques, Fiches")
    def fen4(): #fenêtre du Quiz de SVT
        fen4=Tk()
        fen4.geometry("500x500")
        fen4.title("SVT, Quiz")
    def fen5(): #fenêtre des Fiches de SVT
        fen5=Tk()
        fen5.geometry("500x500")
        fen5.title("SVT, Fiches")
        can=Canvas(fen5,height=500,width=500,bg="grey")
        ima1=PhotoImage(file='SVT1.png')
        can.create_image(250,250,image=ima1)
        can.place(x=10,y=10)
        fen5.mainloop()
    def fen6(): #fenêtre du Quiz de Physique
        fen6=Tk()
        fen6.geometry("500x500")
        fen6.title("Physique, Quiz")
    def fen7(): #fenêtre des fiches de Physique
        fen7=Tk()
        fen7.geometry("500x500")
        fen7.title("Physique, Fiches")
    def fen8(): #fenêtre du Quiz de Philo
        fen8=Tk()
        fen8.geometry("500x500")
        fen8.title("Philo, Quiz")
    def fen9(): #fenêtre des fiches de Philo
        fen9=Tk()
        fen9.geometry("500x500")
        fen9.title("Philo, Fiches")
    def fen10(): #fenêtre du Quiz Anglais
        fen10=Tk()
        fen10.geometry("500x500")
        fen10.title("Anglais, Quiz")
    def fen11(): #fenêtre des fiches d'Anglais
        fen11=Tk()
        fen11.geometry("500x500")
        fen11.title("Anglais, Fiches")
    def fen12(): #fenêtre du Quiz d'Espagnol
        fen12=Tk()
        fen12.geometry("500x500")
        fen12.title("Espagnol, Quiz")
    def fen13(): #fenêtre des fiches d'Espagnol
        fen13=Tk()
        fen13.geometry("500x500")
        fen13.title("Espagnol, Fiches")
     
     
    def fen1():
        fen1=Tk() #fenêtre du menu principale
        fen1.geometry("1000x700")
        fen1.title("Choisissez votre matière")
        L1=Label(fen1,text="Veuillez choisir la matière avec laquelle vous voulez travailler : ",fg="red")
        L1.place(x=10,y=10)
        L2=Label(fen1,text="Chacune de ces matières vous proposent un quiz et des fiches de révisions",fg="blue",font="gras")
        L2.place(x=350,y =330)
        B_Maths=Button(fen1,text="Maths --> Quiz",height=5,width=20,bg="pink",command=fen2)
        B_Maths.place(x=10,y=50)
        B_Maths1=Button(fen1,text="Maths --> Fiches",height=5,width=20,bg="pink",command=fen3)
        B_Maths1.place(x=200,y=50)
        B_SVT=Button(fen1,text="SVT --> Quiz",height=5,width=20,bg="pink",command=fen4)
        B_SVT.place(x=10,y=150)
        B_SVT1=Button(fen1,text="SVT --> Fiches",height=5,width=20,bg="pink",command=fen5)
        B_SVT1.place(x=200,y=150)
        B_Phys=Button(fen1,text="Physique-Chimie --> Quiz",height=5,width=20,bg="pink",command=fen6)
        B_Phys.place(x=10,y=250)
        B_Phys1=Button(fen1,text="Physique-Chimie --> Fiches",height=5,width=20,bg="pink",command=fen7)
        B_Phys1.place(x=200,y=250)
        B_Philo=Button(fen1,text="Philosophie --> Quiz",height=5,width=20,bg="pink", command=fen8)
        B_Philo.place(x=10,y=350)
        B_Philo1=Button(fen1,text="Philosophie --> Fiches",height=5,width=20,bg="pink",command=fen9)
        B_Philo1.place(x=200,y=350)
        B_Anglais=Button(fen1,text="Anglais --> Quiz",height=5,width=20,bg="pink",command=fen10)
        B_Anglais.place(x=10,y=450)
        B_Anglais1=Button(fen1,text="Anglais --> Fiches",height=5,width=20,bg="pink",command=fen11)
        B_Anglais1.place(x=200,y=450)
        B_Espagnol=Button(fen1,text="Espagnol --> Quiz",height=5,width=20,bg="pink",command=fen12)
        B_Espagnol.place(x=10,y=550)
        B_Espagnol1=Button(fen1,text="Espagnol --> Fiches",height=5,width=20,bg="pink",command=fen13)
        B_Espagnol1.place(x=200,y=550)
     
     
     
     
     
     
    fen.geometry("500x500") #fenêtre du menu démarrer
    fen.title("Bienvenue dans votre aide au bac")
    B=Button(fen,text="Commencer",width=20,bg="blue", command=fen1)
    B.place(x=150,y=250)
    L=Label(fen,text="Entrez votre identifiant pour pouvoir commencer : ")
    L.place(x=150,y=150)
    E=Entry(fen)
    E.place(x=150,y=200)
     
     
     
     
     
     
    fen.mainloop()

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur banc de test
    Inscrit en
    Mai 2014
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur banc de test
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2014
    Messages : 199
    Points : 482
    Points
    482
    Par défaut
    Bonjour,

    Il y a un problème de gestion de fenêtre, je n'ai pas encore de solution mais en fermant la première fenêtre "Bienvenue" une fois avoir lancé la table des matières on peut voir l'image en cliquant sur fiches SVT.

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

    Relisez votre code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    def fen5(): #fenêtre des Fiches de SVT
        fen5=Tk()
        fen5.geometry("500x500")
        fen5.title("SVT, Fiches")
        can=Canvas(fen5,height=500,width=500,bg="grey")
        ima1=PhotoImage(file='SVT1.png')
        can.create_image(250,250,image=ima1)
        can.place(x=10,y=10)
        fen5.mainloop()
    Chaque fois que vous appelez Tk() non seulement va apparaître une nouvelle fenêtre mais vous allez aussi fabriquer un nouvel environnement tkinter. Or sauf exception, vous en avez rarement besoin de plus d'un seul par application.
    Problème: "pyimage1" est une variable Tk qui sera associée à la PhotoImage. Comme le canvas est dans l'environnement Tk correspondant à fen5 et que la PhotoImage est dans celui de fen, la variable pyimage1 n'a pas été créée là ou il faut
    Dans vos fonctions, remplacez les Tk() par des Toplevel() - çà fait une fenetre sans nouvel environnement... -.
    Déclarez "ima1" en variable globale, par exemple juste après le fen = Tk() du début:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ...
    fen=Tk()
    ima1=PhotoImage(file='SVT1.png')
    def fen2(): #fenêtre du Quiz de Maths
    ...
    ca devrait aller "mieux".

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

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur banc de test
    Inscrit en
    Mai 2014
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur banc de test
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2014
    Messages : 199
    Points : 482
    Points
    482
    Par défaut
    J'ai vu qu'on pouvait passer l'argument master à PhotoImage(master=x, file=y), je n'ai plus l'erreur mais ça ne s'affiche pas pour autant.
    J'ai essayé can et fen5.


    Et sinon, il est possible de remplacer la fenêtre principale fen lancée par fen1 en faisant dans la fonction fen1:

    fen.destroy()
    fen1=Tk()

    Et remplacer toutes les autres avec Toplevel() comme précisé par wiztricks.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2014
    Messages : 14
    Points : 21
    Points
    21
    Par défaut Year !
    Extra !
    ça fonctionne bien mieux en effet avec Toplevel() !!
    Merci à vous deux pour vos réponses efficaces et rapides !!

    ~~~~~

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 05/08/2006, 20h43
  2. [Tkinter]Image dans un Canvas
    Par Slade991 dans le forum Tkinter
    Réponses: 2
    Dernier message: 10/06/2006, 14h42
  3. [JScrollPane][Canvas] L'image ne s'affiche pas
    Par TheReturnOfMuton dans le forum AWT/Swing
    Réponses: 10
    Dernier message: 05/06/2006, 13h17
  4. [Tkinter] image dans une fenetre
    Par THE_VIP dans le forum Tkinter
    Réponses: 3
    Dernier message: 13/05/2006, 08h38
  5. [Tkinter] image dans un Frame
    Par THE_VIP dans le forum Tkinter
    Réponses: 7
    Dernier message: 26/04/2006, 14h01

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