Q:

How to redraw text on gradient background in pygame?

I am using python 2.7.1 with pygame 1.9.1 on 64-bit win7.  I am using the gradient code from http://www.pygame.org/wiki/GradientCode to draw my background.  I then display text like so:
countText = font.render( "%d" % secs_left, 1, (255, 0, 0))
countRect = countText.get_rect()
countRect.y, countRect.centerx = yPos, screen.get_rect().width/2
screen.blit(countText, countRect)
pygame.display.flip()

I use this to display a countdown timer, but the problem is the numbers draw on top of one another.  I can specify a background color in the font.render() call that will solve this, but then I get another problem where the solid background doesn't match the gradient background.
I think this can be solved by saving a copy of the gradient background in another surface, and then drawing the relevant portion of the saved surface onto the background before drawing the next number, but I am not sure how to do this.  
I can save a copy of the gradient background like this:
# save a surface with same size and gradient as background
bg_image = pygame.Surface(screen.get_size())
fill_gradient(bg_image, BG_COLOR, GRADIENT_COLOR)

But how do I select the relevant portion of bg_image and draw it to my main screen background?  I tried something like this, doing a screen.blit() to try and erase the current countdown number before blitting the new number, but it doesn't work:
countText = usefont.render( "%d" % secs_left, 1, (255, 0, 0))
countRect = countText.get_rect()
countRect.y, countRect.centerx = yPos, screen.get_rect().width/2
screen.blit(bg_image, (0,0), countRect)
screen.blit(countText, countRect)
pygame.display.flip()

Would this be the best approach (with code that works)?  Or is there a better way to do this?  
Thanks for your help.

A:

I can use Surface.set_clip() to restrict the area being updated to just the rectangle containing the countdown text:
countText = usefont.render( "%d" % secs_left, 1, (255, 0, 0))
countRect = countText.get_rect()
countRect.y, countRect.centerx = yPos, screen.get_rect().width/2
screen.set_clip(countRect)        # Allow updates only to area in countRect
screen.blit(bg_image, (0,0))      # bg_img will only be drawn within countRect
screen.blit(countText, countRect)
pygame.display.flip()

