You need to add a
$canvas->update() before the sleep, and you'd be advised to replace the sleep with some more Tk-friendly form of delay. In fact, you probably want to replace the whole loop with a timer, whose event handler performs the necessary canvas additions. This would obviate completely the need to update as well as sleep.
bbfu
Black flowers blossom
Fearless on my breath