簡體   English   中英

tkinter:按下按鈕添加新圖像錯誤

[英]tkinter: Pressing a button to add new image error

這是我的代碼。 我試圖用圖形對游戲“連續4個”進行編程,並且我想在按下畫布時添加一個圖像:

 def player_vs_player(self):
    self.pvp = tk.Tk()
    main_menu=tk.Button(self.pvp,text="main_menu",bg="black",fg="white",
                        command=self.main_menu)
    main_menu.grid(row=0,column=0)
    canvas = tk.Canvas(self.pvp, width=700, height=600, bg="black")
    canvas.grid(row=1, column=0, rowspan=6, columnspan=7)
    canvas.bind("<Button-1>", self.mouse_callback)
    self._root.withdraw()
    self.pvp.mainloop()

def mouse_callback(self, event):
    self.player = self.game.current_player
    ball = tk.Label(self.pvp,image=self.color_match[self.player])
    ball.image = self.color_match[self.player]
    try:
        loc = self.game.make_move(event.x // 100)
        ball.grid(row=loc[1], column=loc[0])
    except:
        tk.messagebox.showinfo("Error", "column is full")
    if self.game.get_winner() == 0:
        tk.messagebox.showinfo("Game Over!", "It's a tie")
        self.close_pvp()
    if self.game.get_winner():
        tk.messagebox.showinfo("Game Over!", 'Player' + str(self.player)
                               + 'has won')
        self.close_pvp()

我不斷收到此錯誤:

Exception in Tkinter callback
  Traceback (most recent call last):
    File "C:\Users\Adam\Downloads\WPy-3662\python-3.6.6.amd64\lib\tkinter\__init__.py", line 1702, in __call__
      return self.func(*args)
    File "C:/Users/Adam/Documents/ComputerSciense/ex12/gui.py", line 69, in mouse_callback
      ball = tk.Label(self.pvp,image=self.color_match[self.player])
    File "C:\Users\Adam\Downloads\WPy-3662\python-3.6.6.amd64\lib\tkinter\__init__.py", line 2763, in __init__
      Widget.__init__(self, master, 'label', cnf, kw)
    File "C:\Users\Adam\Downloads\WPy-3662\python-3.6.6.amd64\lib\tkinter\__init__.py", line 2296, in __init__
      (widgetName, self._w) + extra + self._options(cnf))
  _tkinter.TclError: image "pyimage3" doesn't exist

init:這是init,我認為問題不在於字典,因為它配置正確:

  def __init__(self):
    self._root = tk.Tk()
    self.game = Game(Board())
    self.player = self.game.current_player
    self.blueball = ImageTk.PhotoImage(Image.open("blueball.png").
                                       resize((90, 90), Image.ANTIALIAS))
    self.boardimage = ImageTk.PhotoImage(Image.open("b.png").
                                         resize((600, 700),
                                                Image.ANTIALIAS))
    self.redball = ImageTk.PhotoImage(Image.open("redball.png").
                                      resize((90, 90), Image.ANTIALIAS))
    self.exit = ImageTk.PhotoImage(Image.open('exit.png').
                                   resize((100, 100), Image.ANTIALIAS))
    self.pvpimage = ImageTk.PhotoImage(Image.open('pp.png').
                                       resize((100, 100), Image.ANTIALIAS))
    self.pvcimage = ImageTk.PhotoImage(Image.open('pcp.png').
                                       resize((100, 100), Image.ANTIALIAS))
    self.color_match = {1: self.redball, 2: self.blueball}
    self._cv = tk.Canvas(self._root, width=700, height=600, bg="#84d0ff")

正如其他人所說,這肯定是由Tk()的多個實例引起的。 以下是具有相同錯誤類型的演示示例:

from tkinter import *
from PIL import ImageTk, Image

# create the image in one Tk instance
win = Tk()
img = ImageTk.PhotoImage(Image.open('redball.png').resize((100, 100)))

# then use the image in another Tk instance
root = Tk()
Label(root, image=img).pack()
root.mainloop()

上面的程序將出現以下錯誤:

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

如果只想在應用程序中有多個窗口,請使用Tk()作為主窗口,並使用Toplevel()作為其他窗口。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM