[Tutor] design question

Knacktus knacktus at googlemail.com
Sat Sep 11 10:23:53 CEST 2010


Am 10.09.2010 16:11, schrieb Albert-Jan Roskam:
> Hi Jan,
>
> Here's a screendump of my program: http://nl.tinypic.com/r/2qtlojc/7 .
> This might make my description a little bit clearer. The beautiful
> sunset will in reality be a dull, handwritten form. ;-)
>
> Regarding the iterator pattern, I was referring to this:
> http://www.suttoncourtenay.org.uk/duncan/accu/pythonpatterns.html#iterators-and-generators
> Inside my program I have to keep a list of all the image files that are
> scheduled for data entry. The main purpose is to be able to read in the
> image files one by one. Another one of the purposes of this list is to
> show some information on the title bar. Currently, my program only has a
> 'next' button and the fact that implementing a 'previous' button is
> causing problems suggests to me that I have to look for a more
> fundamentally better solution.
Sounds to me that the easiest solution would be to simply use a list to 
hold the images, a reference to the current image and your desired 
methods in a class.

class ImageStack(object):

     def __init__(self, images=None)
         self.images = images or []
         self.current_image = None

     def next_image(self):
         if self.current_image:
             current_index = self.images.index(self.current_image)
             try:
                 next_image = self.images[current_index + 1]
             except IndexError:
                 print "All images done" # or return the first one
         else:
             next_image = self.images[0]
         self.current_image = next_image
         return next_image

     def prev_image(self):
         if self.current_image:
             current_index = self.images.index(self.current_image)
             try:
                 prev_image = self.images[current_index - 1]
                 self.current_image = next_image
                 return next_image
             except IndexError:
                 print "There's no prev image"
         print "There's no current image"


You could also track the current_index instead of the current_image. 
That would make the class easier, but how to track the current image 
depends on what other methods you need.

HTH,

Jan

> Cheers!!
> Albert-Jan


More information about the Tutor mailing list