Tkinter create image function error (pyimage1 does not exist)

41,845

Solution 1

Have a try and define a master:

PhotoImage(master = canvas, width = WIDTH, height = HEIGHT)

If you do not define a master then this image uses the first Tk() which is created and if that Tk is deleted there is no image to display.

Tell me if it works, I am guessing.

Solution 2

Okay, I thanks for the input, people! I managed to fix it by changing the window = Tk() into window = Toplevel and replacing anchor = tkinter.NW to anchor = NW. Now it runs exactly how I intended it. On to finish the input GUI! :D

Share:
41,845
Silmarillion101
Author by

Silmarillion101

Hi! I'm me. The Hitchhiker's Guide to the Galaxy defines 'me' as "the objective case of 'I', used to refer to the speaker as the object of a verb". I am therefore stating that I am the speaker, and that I am myself. It can then be deducted that the one speaking is myself. further information about 'me' is listed below: I am a teenaged girl. I live on the planet Earth in the region 'U.S.A.' I really love reading, especially the wonderful Mr. Tolkien. I hold these truths to be self-evident; that all men are created awesome, and that they are endowed by their Creator with certain unalienable Talents, that among these are Drawing, Writing, and pursuit of Imagination. That to secure these talents, Publishers are instituted among Men, deriving their just royalties from the consent of the authors... Anyway, thanks for viewing my profile. If I can help you in any way, just let me know. See you later! ~Marye

Updated on September 08, 2020

Comments

  • Silmarillion101
    Silmarillion101 over 3 years

    I'm a student from the outside world with no previous programming experience. I have been learning Python as an extension of my math class. I have been trying to create a program that generates fractals using Tkinter. The code works well on its own, but the inclusion of a user-input GUI causes it to give an error:

        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
    

    The code itself is below. Please note that the error doesn't appear until the canvas.create_image line is run. If there is any other information that I can provide, please let me know. Thanks! :)

        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()
    
  • Mohammed
    Mohammed over 9 years
    I faced the same problem when I tried to import a module inside a function call. The error message was displayed until I defined (master= canvas). Thanks for posting this answer.