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 deTk
. 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 deToplevel
. - 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
Vous devez vous connecter pour publier un commentaire.
Avoir un essai et de définir un maître:
Si vous ne définissez pas un maître puis cette image utilise la première
Tk()
qui est créé et siTk
est supprimé, il n'y a aucune image à afficher.Me dire si cela marche, je suis dans le doute.
Ok, j'merci pour l'entrée, les gens! J'ai réussi à le résoudre en changeant la
window = Tk()
enwindow = Toplevel
et le remplacement deanchor = tkinter.NW
àanchor = NW
. Maintenant, il fonctionne exactement comment je l'ai voulu. Pour finir la saisie de GUI! 😀