
An animation showing the scroller output on the console.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
Console Text Scroller
~~~~~~~~~~~~~~~~~~~~~
Scroll a text on the console.
Don't forget to play with the modifier arguments!
:Copyright: 2007-2008 Jochen Kupperschmidt
:Date: 31-Aug-2008
:License: MIT_
.. _MIT: http://www.opensource.org/licenses/mit-license.php
"""
from itertools import cycle
from sys import stdout
from time import sleep
def stepper(limit, step_size, loop, backward, bounce):
"""Generate step indices sequence."""
steps = range(0, limit + 1, step_size)
if backward:
steps.reverse()
if bounce:
steps.extend(reversed(steps))
if loop:
steps = cycle(steps)
return iter(steps)
def display(string):
"""Instantly write to standard output."""
stdout.write('\r' + string)
stdout.flush()
def scroll(message, window, backward=False, bounce=True,
loop=True, step_size=1, delay=0.1, template='[%s]'):
"""Scroll a message."""
string = ''.join((' ' * window, message, ' ' * window))
limit = window + len(message)
steps = stepper(limit, step_size, loop, backward, bounce)
try:
for step in steps:
display(template % string[step:window + step])
sleep(delay)
except KeyboardInterrupt:
pass
finally:
# Clean up.
display((' ' * (window + len(template) - 2)) + '\r')
if __name__ == '__main__':
scroll('All your base are belong to us!', 20)