Tk window and contents will not display

Chris Hare chare at labr.net
Sun Aug 15 01:23:02 CEST 2010


On Aug 14, 2010, at 5:49 PM, Peter Otten wrote:

> 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
> -- 
> http://mail.python.org/mailman/listinfo/python-list

Yes - you are bang on.

Thanks.  One final question if I may, how would you suggest I handle checking for new files and adding them to the list?  For example, if the loop is playing and a new image is added, how can I detect it and then refresh the list of file?

I am stuck on that part with this new approach.

Chris




More information about the Python-list mailing list