Tkinter, de créer l'image de la fonction d'erreur (pyimage1 n'existe pas)

Je suis un étudiant de l'extérieur avec aucune expérience de la programmation. J'ai été l'apprentissage de Python comme une extension de mon cours de maths. J'ai essayé de créer un programme qui génère des fractales en utilisant Tkinter. Le code fonctionne bien sur son propre, mais l'inclusion d'une entrée utilisateur GUI causes de donner un message d'erreur:

    Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Python33\lib\tkinter\__init__.py", line 1475, in __call__
return self.func(*args)
File "C:\Python33\FractalGUI.py", line 74, in fractals
canvas.create_image((0, 0), image = img, state = "normal", anchor = tkinter.NW)
File "C:\Python33\lib\tkinter\__init__.py", line 2319, in create_image
return self._create('image', args, kw)
File "C:\Python33\lib\tkinter\__init__.py", line 2310, in _create
*(args + self._options(cnf, kw))))
_tkinter.TclError: image "pyimage1" doesn't exist

Le code est ci-dessous. Veuillez noter que l'erreur n'apparaît pas jusqu'à ce que le canvas.create_image ligne est exécutée. Si toutes les autres informations que je peux donner, s'il vous plaît laissez-moi savoir. Merci! 🙂

    import tkinter
from tkinter import *
#Creates widgets for user input
class Imagespecs(Frame):
def __init__(self,master):
Frame.__init__(self,master)
self.grid()
self.y_axis()
self.x_axis()
#Y axis input
def y_axis(self):
self.instruction = Label(self,text = "How many pixels high do you want the image?")
self.instruction.grid(row = 8, column = 0, columnspan = 2, sticky = N)
self.height = Entry(self)
self.height.grid(row = 10, column = 1, sticky = E)
#Enters info to run fractal generation
self.submit_button = Button(self,text = "Submit", command = self.fractals)
self.submit_button.grid(row = 14, column = 2, sticky = E)
#X axis input
def x_axis(self):
self.instruction2 = Label(self,text = "How many pixels wide do you want the image?")
self.instruction2.grid(row = 4, column = 0, columnspan = 2, sticky = E)
self.width = Entry(self)
self.width.grid(row = 6, column = 1, sticky = E)
#generates fractal
def fractals(self):
#Replace non-input
content = self.width.get()
content2 = self.height.get()
if content == "":
content = 500
if content2 == "":
content2 = 500
#Create window specs
WIDTH = int(content2); HEIGHT = int(content)
xa = -2.0; xb = 1.0
ya = -1.5; yb = 1.5
maxIt = 256
window = Tk()
canvas = Canvas(window, width = WIDTH, height = HEIGHT, bg = "#000000")
img = PhotoImage(width = WIDTH, height = HEIGHT)
#The Newton-Raphson iteration
h = HEIGHT
for ky in range(HEIGHT):
print (h)
h = h - 1
for kx in range(WIDTH):
c = complex(xa + (xb - xa) * kx / WIDTH, ya + (yb - ya) * ky / HEIGHT)
z = complex(0.0, 0.0)
for i in range(maxIt):
z = z * z + c
if abs(z) >= 2.0:
break
rd = hex(i % 4 * 64)[2:].zfill(2)
gr = hex(i % 8 * 32)[2:].zfill(2)
bl = hex(i % 16 * 16)[2:].zfill(2)
img.put("#" + rd + gr + bl, (kx, ky))
canvas.create_image((0, 0), image = img, state = "normal", anchor = tkinter.NW)
#Run GUI
canvas.pack()
mainloop()
root = Tk()
root.title("Fractal GUI")
root.geometry("300x200")
app = Imagespecs(root)
root.mainloop()
  • Une partie du problème est que vous êtes en train de créer plus d'une fois instance de Tk. Tkinter est conçu de telle sorte qu'il ne devrait jamais être exactement une fois instance de Tk. Votre code semble aussi avoir quelques erreurs d'indentation.
  • Ok, merci! Je vais doubler vérifier l'indentation. Connaissez-vous un moyen de régler la question des Savoirs traditionnels? En attendant je vais essayer de le réparer, mais si vous avez une solution, je serai reconnaissant. 🙂
  • Si vous avez besoin de plus qu'une fenêtre, créer votre première avec Tk, puis le reste doivent être des instances de Toplevel.
  • Ok, merci!!!! 🙂 Les fenêtres sont ouvertes maintenant, mais il me dit que le nom global tkinter n'est pas défini... je vais travailler davantage sur cette après j'ai fini la Bio de classe. Merci pour toute votre aide et de votre patience pour un débutant.
  • Double Possible de ne peut pas associer l'image à tkinter label