Here is a sample progress indicator class that should
(I think) answer your questions:
class progressbarClass:
def __init__(self, finalcount, progresschar=None):
import sys
self.finalcount=finalcount
self.blockcount=0
#
# See if caller passed me a character to use on the
# progress bar (like "*"). If not use the block
# character that makes it look like a real progress
# bar.
#
if not progresschar: self.block=chr(178)
else: self.block=progresschar
#
# Get pointer to sys.stdout so I can use the write/flush
# methods to display the progress bar.
#
self.f=sys.stdout
#
# If the final count is zero, don't start the progress gauge
#
if not self.finalcount : return
self.f.write('\n------------------ %
Progress -------------------1\n')
self.f.write(' 1 2 3 4 5 6 7 8 9 0\n')
self.f.write('----0----0----0----0----0----0----0----0----0----0\n')
return
def progress(self, count):
#
# Make sure I don't try to go off the end (e.g. >100%)
#
count=min(count, self.finalcount)
#
# If finalcount is zero, I'm done
#
if self.finalcount:
percentcomplete=int(round(100*count/self.finalcount))
if percentcomplete < 1: percentcomplete=1
else:
percentcomplete=100
#print "percentcomplete=",percentcomplete
blockcount=int(percentcomplete/2)
#print "blockcount=",blockcount
if blockcount > self.blockcount:
for i in range(self.blockcount,blockcount):
self.f.write(self.block)
self.f.flush()
if percentcomplete == 100: self.f.write("\n")
self.blockcount=blockcount
return
if __name__ == "__main__":
from time import sleep
pb=progressbarClass(8,"*")
count=0
while count<9:
count+=1
pb.progress(count)
sleep(0.2)
pb=progressbarClass(100)
pb.progress(20)
sleep(0.2)
pb.progress(47)
sleep(0.2)
pb.progress(90)
sleep(0.2)
pb.progress(100)
print "testing 1:"
pb=progressbarClass(1)
pb.progress(1)
"Canes_Rock" <hi***@yahoo.com> wrote in message
news:48**************************@posting.google.c om...
The information posted at:
http://groups.google.com/groups?hl=e...net%26rnum%3D1
seemed to provide a solution to eliminating the line feed and causing
a carriage return for the text displayed in the IDLE window, (I want
to be able to overwrite displayed text - that is, eliminating the line
feed from occuring and causing a carriage return).
The comma at the end of the print command appeared to have eliminated
the line feed, (\n), but the carriage return, (\r) does not work. For
example, (logic borrowed from previously referenced thread):
for i in range(10) : print '\r' + `i`,
This produces a small square box before each number, (sorry - can't
duplicate the small square box here in this posting but if you were to
substitute X for box the output would look like this):
X1 X2 X3 X4 X5 X6 X7 X8 X9
as you can see the line feed has been eliminated but the carriage
return is not functioning as I would expect, (yes - its always about
me isn't it?).
I also tried a variation using sys.stdout.write and sys.stdout.flush
but the root cause is the issue with the carriage return.
Am I screwed or is there a way around this? I am running Windows XP
Home Edition using Python version 2.3.3 and IDLE version 1.0.2
Any help would be appreciated!
Thanks...