Как решить Ошибка: изображение "pyimage1" не существует - PullRequest
0 голосов
/ 05 июля 2019

Я хотел запрограммировать простую графическую версию Tic Tac Toe на 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()

Выходными данными должны быть два окна: первое, в котором вы выбираете символ, чтобы оно работало нормально, а во втором должно быть поле «крестики-нолики», где при нажатии на кнопку должен отображаться выбранный вами символ. И вместо этого я получаю сообщение об ошибке image "pyimage1" doesn't exist Также извините за уродливый код, я все еще новичок, особенно в Python

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...