如何解决错误:图像“ pyimage1”不存在

时间:2019-07-05 15:40:27

标签: python class object tkinter

我以前曾与朋友制作过基于文本的文本,所以我想用Python编写井字游戏的简单图形版本。为此,我使用了tkinter。在第一个窗口中,您可以选择想要的符号,从而能够消除所有错误。但是在第二个应该放置它的窗口中,当我按下其中一个按钮时,它告诉我“ pyimage2”不存在,这似乎是一个常见错误

我已经签出了其他一些线程,告诉我应该改用TopLevel,因为只能有一个Tk()实例。但是我已经在使用它了,当我尝试通过在第一个上使用destroy()来使用两个实例时,错误仍然存​​在。我也已经从简单的PhotoImage切换到PIL,但是即使那样也没有帮助

from tkinter import *
from random import *
from PIL import Image, ImageTk
global root
global SpielerSymbol
SpielerSymbol = "Defaultshit"
def combine_funcs(*funcs):
        def combined_func(*args, **kwargs):
            for f in funcs:
                f(*args, **kwargs)
class SelectionScreen:
    def __init__(self,pRoot):
        Imageo = Image.open("o.png")
        o = ImageTk.PhotoImage(Imageo)
        Imagex = Image.open("x.png")
        x = ImageTk.PhotoImage(Imagex)
        Screen = Toplevel(pRoot)
        self.TextField = Label(Screen, text="Please choose a symbol.")
        self.TextField.grid(row=1,column=1)
        self.ButtonX = self.SelectionButton(x,Screen)
        self.ButtonX.Choice.grid(row = 2, column = 1)
        self.ButtonO = self.SelectionButton(o,Screen)
        self.ButtonO.Choice.grid(row = 2, column = 2)
        Screen.mainloop()
    class SelectionButton:
        def __init__(self, pImage, pScreen):
            self.Choice = Button(pScreen, image = pImage, command = lambda: combine_funcs(setSpielerSymbol(str(pImage)), pScreen.destroy(), pScreen.quit()))
def setSpielerSymbol(pZeichen):
    global SpielerSymbol
    SpielerSymbol = pZeichen
class Game:
    def __init__(self, pRoot):
        global SpielerSymbol
        ImageFeldx = Image.open("Feldx.png")
        Feldx = ImageTk.PhotoImage(ImageFeldx)
        ImageFeldo = Image.open("Feldo.png")
        Feldo = ImageTk.PhotoImage(ImageFeldo)
        ImageFeld = Image.open("Feld.png")
        Feld = ImageTk.PhotoImage(ImageFeld)
        Window = Toplevel(pRoot)
        Feld1 = [self.Feld(Feld,Window,1,1), self.Feld(Feld,Window,1,2), self.Feld(Feld,Window,1,3),
        self.Feld(Feld,Window,2,1), self.Feld(Feld,Window,2,2), self.Feld(Feld,Window,2,3),
        self.Feld(Feld,Window,3,1), self.Feld(Feld,Window,3,2), self.Feld(Feld,Window,3,3)]
        Window.mainloop()
    class Feld:
        def __init__(self, pImage, pWindow, pRow, pColumn):
            self.Feld1 = Button(pWindow, image = pImage, command =lambda: combine_funcs(self.setFeldImage(self), Window.quit()) )
            self.Feld1.grid(row=pRow,column=pColumn)
        def setFeldImage(self, pFeld1):
            pFeld1.Feld1.config(image=SpielerSymbol)
def main():
    root = Tk()
    root.withdraw()
    SelectionScreen1 = SelectionScreen(root)
    print("Das ist das Werk von Feiglingen")
    Game1 = Game(root)
main()

输出应该是两个窗口,第一个窗口是您选择符号的窗口,一个窗口应该可以正常工作,第二个窗口是tic tac toe字段,在其中单击按钮应显示您选择的符号。而我得到的是错误消息image "pyimage1" doesn't exist 同样为难看的代码感到抱歉,我仍然是一个初学者,尤其是在Python上

0 个答案:

没有答案