это мои коды:
import turtle as t
import inspect
import tkinter as tk
class GUI:
def __init__(self, mPos = [0, 0], mAngle = 0, mjellynum = 1, mSpd = 4, bPoses = [[100, 100]]):
self.lvl = self.Level(gui = self, jellyPoses = bPoses)
self.tur = self.Turtle(gui = self, pos = mPos, angle = mAngle, jellynum = mjellynum, spd = mSpd)
self.updateChilds()
def __del__(self):
print("gui deleted")
def updateChilds(self):
try:
self.lvl.gui = self
self.tur.gui = self
except:
pass
t.Screen().ontimer(self.updateChilds, 1)
class Turtle:
def __init__(self, gui, pos = [0, 0], angle = 0, jellynum = 1, spd = 4):
self.gui = gui
t.ht()
t.Screen().setup(width = 0.5, height = 0.94, startx = 960, starty = 0)
self.pos = pos
self.angle = angle
self.jellynum = jellynum
self.m = t.Turtle()
self.m.speed = 0
self.m.penup()
self.m.goto(self.pos)
self.m.seth(self.angle)
self.m.shape("turtle")
self.m.speed = spd
self.checkJellyfish()
def __del__(self):
print("turtle deleted")
def goto(self, x, y = None):
if y != None:
#self.checkjellyfish([x, y])
self.m.goto(x, y)
else:
#self.checkjellyfish(x)
self.m.goto(x)
self.pos = self.m.pos()
def lookAt(self, x, y = None):
if y != None:
if self.m.heading() <= self.m.towards(x, y):
self.m.rt(self.m.heading() - self.m.towards(x, y))
else:
self.m.lt(self.m.heading() - self.m.towards(x, y))
else:
if self.m.heading() <= self.m.towards(x):
self.m.rt(self.m.heading() - self.m.towards(x))
else:
self.m.lt(self.m.heading() - self.m.towards(x))
self.angle = self.m.heading()
def fd(self, dis):
self.m.fd(dis)
self.pos = self.m.pos()
def forward(self, dis):
self.fd(dis)
def setAngle(self, angle):
self.m.seth(angle)
self.angle = self.m.heading()
def turn(self, angle):
self.m.rt(angle)
self.angle = self.m.heading()
def jellyfish(self, i):
return self.gui.lvl.jellyfishs[i]
def checkJellyfish(self):
try:
for i in self.gui.lvl.jellyfishs:
if self.m.distance(i.pos()) <= 0.1:
self.gui.lvl.hide(i)
self.jellynum -= 1
if self.jellynum == 0:
print("You Won")
except AttributeError as er:
print(er)
t.Screen().ontimer(self.checkJellyfish, 1)
def reset(self):
self.m.ht()
t.reset()
t.ht()
class Jellyfish(t.Turtle):
def goto(self, x, y=None):
curframe = inspect.currentframe()
calframe = inspect.getouterframes(curframe, 2)
if not calframe[1][1].endswith("temp.py"):
if y is None:
self._goto(t.Vec2D(*x))
else:
self._goto(t.Vec2D(x, y))
class Level:
def __init__(self, gui, jellyPoses):
self.jellyfishs = []
self.gui = gui
self.image = "C:\\Users\\yuvro\\OneDrive\\Desktop\\Python\\scripts\\Codeturtle\\assets\\images\\jellyfish.gif"
t.Screen().addshape(self.image)
t.Screen().bgpic(self.image)
for i in jellyPoses:
self.createJellyfish(i)
def __del__(self):
for i in self.jellyfishs:
i.ht()
print("level deleted")
def createJellyfish(self, pos):
self.jellyfishs.append(self.gui.Jellyfish())
self.jellyfishs[-1].pu()
self.jellyfishs[-1].goto(pos)
self.jellyfishs[-1].shape(self.image)
def hide(self, trtl):
self.jellyfishs[self.jellyfishs.index(trtl)].hideturtle()
import tkinter as tk
from gui import *
import keyboard as k
import importlib
import os
class UserInterface:
def __init__(self):
self.root = tk.Toplevel()
self.root.title("Codeturtle")
self.txtBox = tk.Text(self.root)
self.txtBox.grid(columnspan = 8)
self.runBut = tk.Button(self.root, text = "Run", command = self.run)
self.runBut.grid(row = 1)
self.turBut = tk.Button(self.root, text = "turtle", command = None)
self.turBut.bind("<ButtonRelease>", self.writeM)
self.turBut.grid(row = 1, column = 1)
self.jellyBut = tk.Button(self.root, text = "jellyfish", command = None)
self.jellyBut.bind("<ButtonRelease>", self.writeJ)
self.jellyBut.grid(row = 1, column = 2)
self.gotoBut = tk.Button(self.root, text = ".goto()", command = None)
self.gotoBut.bind("<ButtonRelease>", self.writeG)
self.gotoBut.grid(row = 1, column = 3)
self.lookAtBut = tk.Button(self.root, text = ".lookAt()", command = None)
self.lookAtBut.bind("<ButtonRelease>", self.writeL)
self.lookAtBut.grid(row = 1, column = 4)
self.forwardBut = tk.Button(self.root, text = ".forward()", command = None)
self.forwardBut.bind("<ButtonRelease>", self.writeF)
self.forwardBut.grid(row = 1, column = 5)
self.setAngleBut = tk.Button(self.root, text = ".setAngle()", command = None)
self.setAngleBut.bind("<ButtonRelease>", self.writeA)
self.setAngleBut.grid(row = 1, column = 6)
self.turnBut = tk.Button(self.root, text = ".turn()", command = None)
self.turnBut.bind("<ButtonRelease>", self.writeT)
self.turnBut.grid(row = 1, column = 7)
self.gui = GUI()
self.turtle = self.gui.tur
def run(self):
self.turtle.reset()
self.turtle.__del__()
self.gui.lvl.__del__()
self.gui.__del__()
o = open("temp.py", "w")
o.write("def run(turtle):\n\tdef jellyfish(i):\n\t\treturn turtle.jellyfish(i)\n\n\n\t" + self.txtBox.get("1.0", tk.END).replace("\n", "\n\t") + "\n\n\treturn turtle")
o.close()
gui = GUI()
turtle = gui.tur
import temp
importlib.reload(temp)
try:
self.turtle = temp.run(turtle)
except:
print("an error occurred")
turtle.reset()
turtle.__del__()
gui.lvl.__del__()
gui.__del__()
self.gui = GUI()
self.turtle = self.gui.tur
try:
os.remove("temp.py")
except:
pass
#for i in self.txtBox.get("1.0", tk.END).split("\n"):
# if i != "" and i != None and not i[0] == "#":
# eval(i)
#self.turtle = turtle
self.gui = gui
def writeM(self, b):
k.write("turtle")
def writeG(self, b):
k.write(".goto()")
def writeL(self, b):
k.write(".lookAt()")
def writeF(self, b):
k.write(".forward()")
def writeA(self, b):
k.write(".setAngle()")
def writeT(self, b):
k.write(".turn()")
def writeJ(self, b):
k.write("jellyfish")
if __name__ == "__main__":
user = UserInterface()
и это ошибка:
Traceback (most recent call last):
File "C:\Users\yuvro\OneDrive\Desktop\Python\scripts\Codeturtle\userInterface.py", line 89, in <module>
user = UserInterface()
File "C:\Users\yuvro\OneDrive\Desktop\Python\scripts\Codeturtle\userInterface.py", line 36, in __init__
self.gui = GUI()
File "C:\Users\yuvro\OneDrive\Desktop\Python\scripts\Codeturtle\gui.py", line 8, in __init__
self.lvl = self.Level(gui = self, jellyPoses = bPoses)
File "C:\Users\yuvro\OneDrive\Desktop\Python\scripts\Codeturtle\gui.py", line 126, in __init__
t.Screen().bgpic(self.image)
File "C:\Program Files (x86)\Python38-32\lib\turtle.py", line 1482, in bgpic
self._setbgpic(self._bgpic, self._bgpics[picname])
File "C:\Program Files (x86)\Python38-32\lib\turtle.py", line 738, in _setbgpic
self.cv.itemconfig(item, image=image)
File "<string>", line 1, in itemconfig
File "C:\Program Files (x86)\Python38-32\lib\tkinter\__init__.py", line 2898, in itemconfigure
return self._configure(('itemconfigure', tagOrId), cnf, kw)
File "C:\Program Files (x86)\Python38-32\lib\tkinter\__init__.py", line 1627, in _configure
self.tk.call(_flatten((self._w, cmd)) + self._options(cnf))
_tkinter.TclError: image "pyimage3" doesn't exist
Может кто-нибудь, пожалуйста, помогите мне, inte rnet говорит, чтобы изменить его от tk.Tk () до tk.Toplevel (), но это уже так. (строка 9 в коде 2) Я думаю, это происходит потому, что tkinter.Toplevel () находится в другом коде, но я не уверен. Похожая ошибка «изображения« pyimage2 »не существует» происходит, когда я пытаюсь установить форму черепахи.