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 :

Problème pour l'ouverture d'une fenêtre tkinter


Sujet :

Python

  1. #1
    Invité
    Invité(e)
    Par défaut Problème pour l'ouverture d'une fenêtre tkinter
    Bonjour à tous,

    Je prépare un jeu pour mon projet d'ISN, il s'agit d'un jeu de stratégie au tour par tour, seulement, les joueurs devront choisir leur personnage sur une fenêtre tkinter que j'ai déjà créer, je souhaite que lorsque les joueurs ont tous sélectionnés, cette fenêtre se ferme et une autre fenêtre s'ouvre(celle où ils jouent). J'ai réalisé les deux modules qui ouvrent chacun une fenêtre. J'ai essayé de tout mettre dans le même module. J'ai réussi et tout s'ouvre sauf que la fenêtre où les joueurs doivent jouer apparaît vide.
    Voici le problème dans l'interpréteur python :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Traceback (most recent call last):
      File "E:\Applications\Portable Python 2.7.5.1\App\lib\lib-tk\Tkinter.py", line 1470, in __call__
        return self.func(*args)
      File "E:\Projet\Test Final.py", line 455, in Validation
        LOL()
      File "E:\Projet\Test Final.py", line 237, in LOL
        Canevas.create_image(0, 0, anchor=NW, image=fond)
      File "E:\Applications\Portable Python 2.7.5.1\App\lib\lib-tk\Tkinter.py", line 2260, in create_image
        return self._create('image', args, kw)
      File "E:\Applications\Portable Python 2.7.5.1\App\lib\lib-tk\Tkinter.py", line 2251, in _create
        *(args + self._options(cnf, kw))))
    TclError: image "pyimage17" doesn't exist

    Je vous joins tout les fichier utile pour que vous puissiez essayer vous même :
    Projet.zip

    Je ne vous met pas le code car il est long. Mais si quelqu'un sait comment faire, merci de m'éclairer

  2. #2
    Membre émérite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    553
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2010
    Messages : 553
    Points : 2 740
    Points
    2 740
    Par défaut
    Salut,

    es-tu bien sûr d'avoir mis tous tes fichiers dans le zip...?
    car si je me fie au message d'erreur, ton projet doit contenir un fichier "Test Final.py" qui n'apparait nulle pas dans le zip.
    (d'ailleurs je me permet une petite disgression: les espaces dans les nom de fichiers, c'est le mal. comme les accents et tous les caractères non ascii. ça gène de moins en moins mais on tombe toujours sur un logiciel, une bibliothèque ou une fonction qui ne sait pas les traiter.)

  3. #3
    Invité
    Invité(e)
    Par défaut
    Le Test Final était le fichier où j'ai tout mélangé mais du coup, cela ne fonctionnait pas, je te le link :
    Test Final.py

    Franchement, je ne comprend pas d'où vient l'erreur...

  4. #4
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Citation Envoyé par Stop0g Voir le message

    Franchement, je ne comprend pas d'où vient l'erreur...

    Pas clair, ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TclError: image "pyimage17" doesn't exist

  5. #5
    Invité
    Invité(e)
    Par défaut
    Le truc, c'est que je n'appelle pas l'image pyimage17... Sinon je l'aurais créé.
    Mais du coup, je me demande si il est possible d'ouvrir deux fenêtres tkinter comme j'espère le faire ou alors si quelqu'un a une solution pour en ouvrir une, la fermer, puis ouvrir une autre fenêtre.

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    pyimage17 est un nom TCL fabriqué par Python.

    Le script "Test Final.py" ne contient pas la fonction LOL() qui est dans la trace de l'erreur.
    Pas facile non plus d'imaginer les actions que vous provoquez côté jeu pour y arriver.

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

  7. #7
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 824
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 824
    Points : 7 120
    Points
    7 120
    Par défaut
    Mais du coup, je me demande si il est possible d'ouvrir deux fenêtres tkinter comme j'espère le faire ou alors si quelqu'un a une solution
    Toplevel ?
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  8. #8
    Invité
    Invité(e)
    Par défaut
    Si j'ai bien compris le principe du Toplevel, il s'agit de recréer une fenêtre au dessus de la précédente, mais comment supprimer la première fenêtre tout en gardant la Toplever d'ouverte ?
    Ou alors c'est comme si j'avais une fenêtre Tkinter, je peux donc utiliser toutes les fonctions (create_image() etc) ?

    Avec le test final, j'avais oublié de préciser que j'avais essayer différemment, du coup voici le nouveau message d'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Traceback (most recent call last):
      File "D:\Projet\Test Final.py", line 488, in <module>
        Im1 = Canfr1.create_image(0,0,anchor=NW, image=J1_S)
      File "C:\Users\User\Desktop\Portable Python 2.7.5.1\App\lib\lib-tk\Tkinter.py", line 2260, in create_image
        return self._create('image', args, kw)
      File "C:\Users\User\Desktop\Portable Python 2.7.5.1\App\lib\lib-tk\Tkinter.py", line 2251, in _create
        *(args + self._options(cnf, kw))))
    TclError: image "pyimage8" doesn't exist
    Ceci dit, le problème est toujours le pyimageX...

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

    Ah, je comprends l'erreur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TclError: image "pyimage8" doesn't exist
    "pyimage8" est l'identifiant construit par PhotoImage à la création de l'Image. C'est le nom de la variable Tk associée à l'Image Python. C'est ce nom là que Tkinter passe à Tk lors du .create_image.
    L'objet tkinter et cette variable sont tellement bien associés que les problèmes de débutants sont autres: l'image n'apparait pas parce que l'instance d'image est déréférencée trop tôt.

    Votre bug est une innovation: bravo!
    Vous appelez plusieurs fois Tk(): pour assigner Jeu puis pour assigner Fen.
    Chaque appel crée son interpréteur Tk et son espace de variables.
    Comme vous ne prenez pas la précaution de preciser le "root" à la création des images, les variables sont créées dans l'interpréteur devenu le root par défaut (pas toujours le bon).
    Lorsque .create_image passe la variable Tk associée, l'interpréteur ne la connaît pas.

    Si j'ai bien compris le principe du Toplevel, il s'agit de recréer une fenêtre au dessus de la précédente, mais comment supprimer la première fenêtre tout en gardant la Toplever d'ouverte ?
    L'appel à Tk construit beaucoup plus qu'une Toplevel: impossible de le supprimer.
    Vous pouvez masquer cette Toplevel, remplacer les Frame à l'intérieur ou créer des Toplevel "filles".
    Des Frame devraient suffire, pour les cacher frame.forget.

    Jouez avec cet exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    >>> import tkinter as tk
    >>> app = tk.Tk()
    >>> f1 = tk.Frame(app, width=100, height=100, bg='red')
    >>> f1.pack()
    >>> f2 = tk.Frame(app, width=100, height=100, bg='blue')
    >>> f2.pack()
    >>> f1.forget()
    >>>

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

  10. #10
    Invité
    Invité(e)
    Par défaut
    Merci pour tout ces détails wiztricks, grâce à ta réponse détaillé, j'ai pu faire ce que je souhaitais (finalement, j'ai forget les frames de la fenêtre de chargement pour insérer les frames du jeu).

    Du coup, tout marche nickel !!

    Je marque la discussion comme résolue

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

Discussions similaires

  1. Problème d'ouverture d'une fenêtre vide
    Par Syliano dans le forum Interfaces Graphiques en Java
    Réponses: 9
    Dernier message: 23/02/2012, 14h15
  2. Réponses: 0
    Dernier message: 05/09/2011, 15h16
  3. Réponses: 2
    Dernier message: 20/04/2010, 18h03
  4. ouverture d'une fenêtre pour exécuter une requête
    Par naazih dans le forum Langage
    Réponses: 3
    Dernier message: 14/05/2008, 18h55

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