On Sat, 11 Sep 2010 12:11:37 am Albert-Jan Roskam wrote: > Inside my program I have to keep a list of all the image files that > are scheduled for data entry.
Sounds like you need to keep a list of all the image files that are scheduled for data entry then. > 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. No it isn't. You don't need a list of image files in order to show "some information" in the title bar (unless that information is the list of files). From your earlier post, you want to show: filename 23 of 245 (9.4%) or similar. For that, all you need is three pieces of information: * the name of the current file * the number of the current file * the total number of files You don't need all 245 files for that. I'm being pedantic here. Obviously you need the list of files *somewhere*, and you need it for other reasons, but you don't *need* a list of 243 files in order to show the name of one of them! You may decide that it is *convenient* to give the function which changes the title bar access to the entire list, but it's not a *requirement*. Think about alternatives: def change_titlebar(name, count, total): template = "%s %d of %d (%.1f %%)" percentage = count*100.0/total title = template % (name, count, total, percentage) do_magic_with(title) # whatever it takes to change the title It doesn't need the entire list. > 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 you *don't* want the iterator pattern. The iterator pattern generally means that you step forward through each item. If you want to advance backwards or forwards, something with random access is probably better. That would probably mean a list. Don't be too hung up about "design patterns". Most design patterns just exist to work around limitations of the language, lack of power, or slavish devotion to object oriented programming when the problem is crying out for a functional or procedural solution. Don't be afraid to write functions instead of classes -- there's no need for a TitlebarManipulator class just to change the titlebar. My solution would be to keep *two* pieces of information: * the list of filenames; * the current position in that list Set the current position to 0, and have the Next button add one to the position and refresh the page, and Prev subtract one and refresh the page. Obviously you need code to ensure that the position doesn't go out of bounds, code to save the data in the fields, and so forth. The page refresh code should do something like: * given the current position, extract the filename to use; * change the title bar; * open and display the appropriate image; * pre-populate any fields; etc. Good luck! -- Steven D'Aprano _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor