RECHERCHER :
COMMUNAUTE MP
Identifiez vous ...
Devenir Membre
J'ai oublié mon MDP
DOMAINE MP
Bavardages
Langages Généraux
Langages Web
Langages DotNet
Autres langages
Dev. Jeux Video
Sécurité
Sys. Exploitation
Graphismes
Logiciels
Réseaux
Bases de données
Méthodologies
Emplois High-tech
Aide juridique
Articles juridiques
FORUM
Index des forums
Ajouter un sujet
Rechercher sujet
Contact Responsable
Devenir modérateur
CHAT MP IRC
Votre pseudo ...
Srv: irc.moteurprog.com
Chan: #MoteurProg
PARTICIPER
Plus de 3500 emplois.
Rechercher un job
Déposez votre CV
Emplois High-tech

Visiteur MP

 Ouverture de fenêtre et photo. (Tkinter)

Forum : PYTHON
Sous Catégorie : Aucune
Type du sujet : Sujet Normale
FAQ : FAQ PYTHON

SUIVI DES SUJETS PAR MAIL

SUIVI PAR MAIL INACTIF

RESOLUTION DU SUJET SUJET NON RESOLU
BLOQUAGE DU SUJET SUJET ACTIF
APPARTENANCE A LA FAQ N'APPARTIENT PAS A LA FAQ


POSTER UN NOUVEAU SUJET REPONDRE A CE SUJET

FORUM PYTHON

PREMIERE PAGE

PAGE PRECEDENTE

Page précedente

Page suivante

PAGE SUIVANTE

DERNIERE PAGE
mouton
Nouveau membre
Inscrit : 18/02/2008
Messages : 6
Message
#149234
Posté le 18/02/08 à 23:34
Bien le bonjour à ceux qui prennent le temps de lire ces quelques lignes, et merci à tous ceux qui tenteront de m'aider ^^.

Avant de commencer, je tiens à m'excuser si le problème était résolu dans un autre sujet, mais le moteur de recherche refusait catégoriquement de fonctionner. Et je n'en ai pas trouvé la cause... Aussi je n'ai pas trouvé mon problème dans les premières pages, alors j'espère avoir été assez attentif et ne prendre le temps de personne en postant ce message :)

Voilà il y a quelques semaines, je me suis mis au Python parce qu'on m'a dit du bien de ce langage (plutot simple, lisible et avec une interface graphique aussi ^^)
J'ai tenté de faire un petit jeu dessus (mais bon, ce n'est pas ce qui nous interesse ici).

Je vais directement au fait :
Dans mon jeu, je compte avoir une fenêtre centrale (avec plateau de jeu, et tout et tout,...). Sur cette fenêtre je place un bouton sur lequel on peut lire "REGLES DU JEU", on peut cliquer dessus à tout instant pour afficher une autre fenêtre avec les règles du jeu.

Ma première idée était la suivante :
Je crée une fonction Regle() qui va ouvrir la fenetre dans laquelle se trouve une image et un (long) texte.
Dans ma fenetre principale, je met un bouton qui appelle Regle.

Alors quand il n'y a pas d'image, aucun probleme, tout s'affiche correctement.
Quand il y a une image. BOUM message d'erreur. (il m'ouvre une deuxième fenêtre complètement vide (enfin la fenêtre a une taille non nulle quand même); m'affiche le message d'erreur dans la console et attend que je ferme les fenêtres)

Je sais pas du tout ce qui se passe. Je précise aussi que quand je lance la fonction Regle() toute seule, ca marche très bien (la photo et le texte s'affichent sans problème).

Voici une partie du code


# Procedure d'affichage des règles def Regle(): regle=Tk() #Crée l'image à partir du "Chemin d'acces de l'image" et la centre en position 215, 215 can=Canvas(regle, width=430, height=430, bg="white") photo = PhotoImage(file = "Chemin d'accès de l'image") item = can.create_image(215,215, image=photo) txt=Label(regle, text='Voici les règles du Colon de Catane') #Ici il y avais un tas de règles que je n'ai pas remis sortie=Button(regle, text="Ok", width=10, height = 1, command=regle.destroy) #Affichage de tous les objets can.grid( row =1 , column =1, rowspan=3 ) txt.grid( row =4 , column =1 ) plateau.grid( row =1 , column =2 ) ressource.grid( row =2 , column =2 ) colonie.grid( row =3 , column =2, padx=5 ) obtres.grid( row =5 , column =1 ) echange.grid( row =4 , column =2 ) voleur.grid( row =5 , column =2 ) victoire.grid( row =6 , column =1, pady=5 ) sortie.grid( row =6 , column =2, pady=5 ) regle.mainloop() #Fin des règles # Procedure principale : fenetre graphique du jeu, avec résultats en temps réel. def fenetreprincipale(): princ=Tk() plateau=Canvas(princ,width=1000,height=990, bg='white') regles=Button(princ,text="Voir les règles", command =Regle) regles.pack() princ.mainloop() #Et après ya l'appel de la fonction fenetreprincipale()


Voici l'erreur :
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Programme Dl\Python\lib\lib-tk\Tkinter.py", line 1345, in __call__
return self.func(*args)
File "C:\Users\Dimitri\Documents\Programmation\Python\Colon de Cathane\Colon.p
y", line 172, in Regle
item = can.create_image(215,215, image=photo)
File "C:\Programme Dl\Python\lib\lib-tk\Tkinter.py", line 2087, in create_imag
e
return self._create('image', args, kw)
File "C:\Programme Dl\Python\lib\lib-tk\Tkinter.py", line 2076, in _create
return getint(self.tk.call(
TclError: image "pyimage2" doesn't exist



J'ai remis ce code parce que j'avais cru trouver une solution à mon problème mais elle ca marche pas (enfin pas encore).
En cherchant un peu sur internet, j'ai trouvé quelqu'un qui avait aussi un problème lorsqu'à partir d'une fenetre principale, il ouvrait une 2e fenetre où se trouvait un Canevas avec une image.

On lui a dit d'utiliser des classes parce qu'à priori il y avait des problèmes si il ouvrait les fenêtre comme ca. (sans blague Smiley)

Bref, j'ai été lire toute la partie consacrée aux classes dans mon tutoriel Smiley
(c'est honteux, mais je savais même pas ce qu'était une classe à ce moment là ^^)

Et j'ai reesayé.
Alors comme je débute un peu, et que j'ai pas trop l'habitude du code, j'ai peut-être fait une erreur de code mais je ne pense pas :


from Tkinter import * class Application(Tk): def __init__(self,acces): Tk.__init__(self) #Initiation de la fenêtre de type Application # Un canvas, avec une image, et un boutton qui lance la méthode ouvrir self.can=Canvas(self,width=500, height=500) self.photo = PhotoImage(acces) item=self.can.create_image(400,400,image = self.photo) self.can.pack() Button(self,text='test', command=self.ouvrir).pack() #Cette méthode ouvre une deuxième fenêtre dans laquelle on trouve un # autre canvas avec la meme image. def ouvrir(self): self.fen=Tk() self.fen.can = Canvas(self.fen, width=500, height=500) item= self.fen.can.create_image(400,400,image = self.photo) self.fen.can.pack() self.fen.mainloop() #Lancement d'une application App app =Application("Chemin d'accès de l'image") app.mainloop()


Bon et là rebelotte, déjà l'image dans la fenêtre principale s'affiche très bien, mais quand je clique sur le bouton de test, erreur du même type que précédement. (enfin au niveau de la fenetre vide et tout et tout)

Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Programme Dl\Python\lib\lib-tk\Tkinter.py", line 1345, in __call__
return self.func(*args)
File "C:\Users\Dimitri\Documents\Programmation\Python\test.py", line 22, in ou
vrir
item= self.fen.can.create_image(400,400,image = self.photo)
File "C:\Programme Dl\Python\lib\lib-tk\Tkinter.py", line 2087, in create_imag
e
return self._create('image', args, kw)
File "C:\Programme Dl\Python\lib\lib-tk\Tkinter.py", line 2076, in _create
return getint(self.tk.call(
TclError: image "pyimage1" doesn't exist




Bon alors ce que je voudrais savoir si quelqu'un le sait c'est :
- Qu'est-ce qui ne va pas dans mon premier code?
- Qu'est-ce qui ne va pas dans le 2e? (Je me demande surtout si j'ai utilisé comme il le faut les classes?)
- Si quelqu'un a une solution, parce que ce problème ne me semble pas compliqué mais je ne vois pas comment faire autrement.

(je sais que PhotoImage n'est pas utilisé en raison de la restriction au Gif, ni Tkinter pour faire des jeux en général, mais je voudrais comprendre quand même ^^)

Je crois n'avoir rien oublié.
Merci d'avoir lu jusqu'en bas ^^.
__________________________
Ceci n'est rien d'autre que la fin du message. A bientôt.

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 


    PAGE : [1]



.: Site Web développé par Julien Pichot et l'équipe MPWG avec www.evolvia-web.com :.