# Java compatibility :-)
from Tkinter import *
class ImageLoopItem:
def __init__(self, master, img='logo:',
pause=3900, delay=100, align=None, text="?", **kw):
self.master = master
self.pause = pause
self.delay = delay
self.context = master.grail_context
self.urlpattern = img + "T%d.gif"
self.images = []
self.index = 0
self.done = 0
self.label = Label(master, text=text, background=master['background'])
self.label.pack()
self.loadnext()
self.schedule()
def loadnext(self):
url = self.urlpattern % (len(self.images) + 1)
image = self.context.get_async_image(url)
if not image:
self.done = 1
else:
self.images.append(image)
def schedule(self):
if not self.images: return
delay = self.delay
if self.done and self.index == 1%len(self.images):
delay = delay + self.pause
self.master.after(delay, self.update)
def update(self):
image = self.images[self.index]
if not self.done:
# Check status of image
if not image.loaded:
# Not loaded -- still busy or failed
if image.get_load_status() == 'loading':
# Still busy -- come again later
self.schedule()
return
# Image loading failed -- we're done
self.done = 1
del self.images[self.index]
self.index = 0
self.schedule()
return
# Loaded -- start loading the next one
self.loadnext()
# We get here only if the image has been successfully loaded
try:
self.label['image'] = image
except TclError:
# The widget probably has been destroyed
return
self.index = (self.index + 1) % len(self.images)
self.schedule()
|