Partage
  • Partager sur Facebook
  • Partager sur Twitter

Image ne s'affichant pas

Sujet résolu
    27 octobre 2023 à 15:40:06

    Bonjour,

    Je suis en train de développer une interface graphique basique pour un jeu de go dans le cadre de mon tipe, et je suis coincé car je n'arrive pas à afficher une image sur un Button tkinter.

    Je vous joins une partie de mon code

    class Fen_jeu(tk.Tk):
    
        def __init__(self, taille):
            super().__init__()
    
            # infos sur la partie
            self.couleur_tour = -1
            self.groupes = []
            self.goban = np.zeros((taille, taille))
            self.tab_boutons = [[0 for k in range(taille)] for k in range(taille)]
            self.boutons = []
            self.pions_captures_N = 0
            self.pions_captures_B = 0
    
            # images
            self.pion_blanc = tk.PhotoImage(file="images/pion blanc.png", master=self)
            self.pion_noir = tk.PhotoImage(file="images/pion noir.png", master=self)
            self.goban19 = tk.PhotoImage(file="images/goban19.png")
            self.goban9 = tk.PhotoImage(file="images/goban9.png")
    
            # infos de la fenêtre
            self.title("Jeu de Go")
            self.creer_barre_menu()
    
            # creation widgets
            self.zone_grille = ttk.Frame(self)
            self.zone_point = ttk.Frame(self)
            self.zone_point.pack()
            self.zone_grille.pack()
            self.creer_zone_grille(taille)
            self.creer_zone_point()

    La fonction init ci dessus,

        def creer_zone_grille(self, n):
            for i in range(n):
                for j in range(n):
                    b = ttk.Button(self.zone_grille,command=lambda k=i, l=j: self.tour_de_jeu((k, l)))
                    self.tab_boutons[i][j]= b
                    b.grid(row=i, column=j)

    la création des boutons, et enfin la fonction où j'attribue une image sur chaque bouton:

        def rafraichir(self):
            nouveau = np.zeros_like(self.goban)
            # met la valeur de la couleur du groupe pour les positions du groupe
            for g in self.groupes:
                for pos in g.positions:
                    nouveau[pos[0], pos[1]] = g.couleur
            self.goban = nouveau
            # met les pions sur le plateau
            self.pion_blanc = tk.PhotoImage(file="images\pion blanc.png")
            self.pion_noir = tk.PhotoImage(file="images\pion noir.png")
            (n,k)= np.shape(self.goban)
            for i in range(n):
                for j in range (n):
                    if self.goban[i,j] == -1:
                        self.tab_boutons[i][j]['image'] = self.pion_noir
                    elif self.goban[i,j] == 1:
                        self.tab_boutons[i][j]['image'] = self.pion_blanc

    La fonction appelée lorsque l'on clique sur un bouton appelle rafraicgir à son tour.

    Lorsque je clique sur un bouton, je reçois l'erreur suivante:

    Exception in Tkinter callback

    Traceback (most recent call last):

      File "C:\Users\grego\AppData\Local\Programs\Python\Python39\lib\tkinter\__init__.py", line 1892, in __call__

        return self.func(*args)

      File "C:\Users\grego\PycharmProjects\TIPEgo\graph.py", line 54, in <lambda>

        b = ttk.Button(self.zone_grille,command=lambda k=i, l=j: self.tour_de_jeu((k, l)))

      File "C:\Users\grego\PycharmProjects\TIPEgo\graph.py", line 120, in tour_de_jeu

        self.rafraichir()

      File "C:\Users\grego\PycharmProjects\TIPEgo\graph.py", line 82, in rafraichir

        self.tab_boutons[i][j]['image'] = self.pion_noir

      File "C:\Users\grego\AppData\Local\Programs\Python\Python39\lib\tkinter\__init__.py", line 1657, in __setitem__

        self.configure({key: value})

      File "C:\Users\grego\AppData\Local\Programs\Python\Python39\lib\tkinter\__init__.py", line 1646, in configure

        return self._configure('configure', cnf, kw)

      File "C:\Users\grego\AppData\Local\Programs\Python\Python39\lib\tkinter\__init__.py", line 1636, in _configure

        self.tk.call(_flatten((self._w, cmd)) + self._options(cnf))

    _tkinter.TclError: image "pyimage8" doesn't exist

    Si quelqu'un a une idée de où est mon erreur, je serais très intéressé.

    Merci beaucoup




    • Partager sur Facebook
    • Partager sur Twitter
      27 octobre 2023 à 16:23:25

      Bonjour,

      _tkinter.TclError: image "pyimage8" doesn't exist

      on ne voit pas le code qui utilise pyimage8 ....

      • Partager sur Facebook
      • Partager sur Twitter
        27 octobre 2023 à 17:01:38

        Il n'y en a pas, il me semble que c'est le nom qu'utilise tcl pour référencer les images qu'utilise tkinter, mais je ne m'y connais pas trop.

        En tous cas je n'ai pas de pyimage8 dans mon code.

        Edit: J'ai fini par trouver, mon erreur vient d'un de mes essais pour résoudre un précédent problème, il ne faut pas que je redéfinisse les images. (lignes 9 et 10 de ma dernière fonction).

        -
        Edité par ThéophileJoin-Lambert 28 octobre 2023 à 17:01:21

        • Partager sur Facebook
        • Partager sur Twitter

        Image ne s'affichant pas

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown