Tk window and contents will not display

Peter Otten __peter__ at web.de
Sat Aug 14 18:49:45 EDT 2010


Chris Hare wrote:

> Thanks Peter.  I threw away what I started with and merged your code into
> my class:
> 
> class externalLoopDisplay:
>     
>     def show(self):
>         main.logging.debug("externalLoopDisplay.show:","start")
> 
>         self.window = Tk()
> 
>         self.btnClose = Button(self.window, text="Close",
>         command=self.window.destroy,
>         bg=backColor,highlightbackground=warnColor,
>         highlightcolor=okColor) self.btnClose.grid(row=0, column=2)
>         self.label = Label(self.window) self.label.grid(row=1, column=0,
>         columnspan=3)
>         dirName =  getRadarPath() + "/net" + str(netNumber.get()) # e.g.
>         .../Radar/net17/net17-YYYYMMDDHHMMSS.gif
> self.imagefiles = glob.glob(dirName + "/*.gif")
> self.imagefiles = cycle(self.imagefiles)
>         self.window.after_idle(self.next_image)
> 
>     def next_image(self):
>         imagefile = next(self.imagefiles)
>         image = Image.open(imagefile)
>     
>         w, h = image.size
>         image = image.resize((600, 550*h//w))
>     
>         self.label.image = self.label["image"] =
>         ImageTk.PhotoImage(image=image) # <==== bails here
>         self.window.title("Now showing %s" % os.path.basename(imagefile))
>     
>         self.window.after(2000, next_image)
> 
> 
> I marked where the code bails with an error saying pyimage2 doesn't exist.
>  All of the images exist and worked just fine with your standalone script.
> 
> Suggestions?

Google says you are calling Tkinter.Tk() more than once where you should 
instead use Tkinter.Toplevel(). As you didn't post that part of the code 
it's hard to verify, but when I add a second 

root = tk.Tk() 

to my example script I get a very similar exception:

Exception in Tkinter callback
Traceback (most recent call last):
  File "/usr/lib/python2.6/lib-tk/Tkinter.py", line 1413, in __call__
    return self.func(*args)
  File "/usr/lib/python2.6/lib-tk/Tkinter.py", line 498, in callit
    func(*args)
  File "cycle_image.py", line 16, in next_image
    label.image = label["image"] = ImageTk.PhotoImage(image=image)
  File "/usr/lib/python2.6/lib-tk/Tkinter.py", line 1212, in __setitem__
    self.configure({key: value})
  File "/usr/lib/python2.6/lib-tk/Tkinter.py", line 1205, in configure
    return self._configure('configure', cnf, kw)
  File "/usr/lib/python2.6/lib-tk/Tkinter.py", line 1196, in _configure
    self.tk.call(_flatten((self._w, cmd)) + self._options(cnf))
TclError: image "pyimage1" doesn't exist

By the way: for future posts please remember to cut and paste the traceback, 
don't paraphrase the error message.

Peter



More information about the Python-list mailing list