pygame is
Simple DirectMedia Layer is
Site Swing



Here is a simple font manager class. Not very sophisticated, but it gets the job done. See the docstrings in the code for more details.

Save the code to a file and run from the commandline to see a trivial demo.

import pygame
from pygame.locals import *
class cFontManager:
    A simple class used to manage Font objects and provide a simple way to use
    them to draw text on any surface.
    Directly import this file to use the class, or run this file from the
    command line to see a trivial sample.
    Written by Scott O. Nelson  
    def __init__(self, listOfFontNamesAndSizesAsTuple):
        Pass in a tuple of 2-item tuples.  Each 2-item tuple is a fontname / 
        size pair. To use the default font, pass in a None for the font name.
        Font objects are created for each of the pairs and can then be used
        to draw text with the Draw() method below.
        Ex: fontMgr = cFontManager(((None, 24), ('arial', 18), ('arial', 24),
            ('courier', 12), ('papyrus', 50)))
        TODO: add support for bold & italics
        self._fontDict = {}
        for pair in listOfFontNamesAndSizesAsTuple:
            assert len(pair) == 2, \
                "Pair must be composed of a font name and a size - ('arial', 24)"
            if pair[0]:
                fontFullFileName = pygame.font.match_font(pair[0])
                assert fontFullFileName,
                    'Font: %s Size: %d is not available.' % pair
                fontFullFileName = None # use default font
            self._fontDict[pair] = pygame.font.Font(fontFullFileName, pair[1])
    def Draw(self, surface, fontName, size, text, rectOrPosToDrawTo, color,
            alignHoriz='left', alignVert='top', antialias=False):
        Draw text with the given parameters on the given surface.
        surface - Surface to draw the text onto.
        fontName - Font name that identifies what font to use to draw the text.
        This font name must have been specified in the cFontManager 
        rectOrPosToDrawTo - Where to render the text at.  This can be a 2
        item tuple or a Rect.  If a position tuple is used, the align
        arguments will be ignored.
        color - Color to draw the text with.
        alignHoriz - Specifies horizontal alignment of the text in the
        rectOrPosToDrawTo Rect.  If rectOrPosToDrawTo is not a Rect, the
        alignment is ignored.
        alignVert - Specifies vertical alignment of the text in the
        rectOrPosToDrawTo Rect.  If rectOrPosToDrawTo is not a Rect, the
        alignment is ignored.
        antialias - Whether to draw the text anti-aliased or not.
        pair = (fontName, size)
        assert pair in self._fontDict, \
            'Font: %s Size: %d is not available in cFontManager.' % pair
        fontSurface = self._fontDict[(fontName, size)].render(text,
            antialias, color)
        if isinstance(rectOrPosToDrawTo, tuple):
            surface.blit(fontSurface, rectOrPosToDrawTo)
        elif isinstance(rectOrPosToDrawTo, pygame.Rect):
            fontRect = fontSurface.get_rect()
            # align horiz
            if alignHoriz == 'center':
                fontRect.centerx = rectOrPosToDrawTo.centerx
            elif alignHoriz == 'right':
                fontRect.right = rectOrPosToDrawTo.right
                fontRect.x = rectOrPosToDrawTo.x  # left
            # align vert
            if alignVert == 'center':
                fontRect.centery = rectOrPosToDrawTo.centery
            elif alignVert == 'bottom':
                fontRect.bottom = rectOrPosToDrawTo.bottom
                fontRect.y = rectOrPosToDrawTo.y  # top
            surface.blit(fontSurface, fontRect)
def RunDemo():
    '''A simple demo of the use of the cFontManager class'''
    pygame.display.set_mode((640, 480))
    screen = pygame.display.get_surface()
    clock = pygame.time.Clock()
    # a font of None means to use the default font
    fontMgr = cFontManager(((None, 24), (None, 48), ('arial', 24)))
    doQuit = False
    while not doQuit:
        clock.tick(60) # run at 60 fps
        screen.fill((0, 0, 0))
        white = (255, 255, 255)
        gray = (64, 64, 64)
        fontMgr.Draw(screen, None, 48, 'Default font, 48', (0, 50), white)
        fontMgr.Draw(screen, None, 24, 'Default font, 24', (0, 0), white)
        rect = pygame.Rect(0, 100, 640, 60)
        pygame.draw.rect(screen, gray, rect)        
        fontMgr.Draw(screen, 'arial', 24, 'Arial 24 top left', rect, white,
            'left', 'top') += 75
        pygame.draw.rect(screen, gray, rect)        
        fontMgr.Draw(screen, 'arial', 24, 'Arial 24 centered', rect, white,
            'center', 'center') += 75
        pygame.draw.rect(screen, gray, rect)        
        fontMgr.Draw(screen, 'arial', 24, 'Arial 24 bottom right', rect,
            white, 'right', 'bottom') += 75
        pygame.draw.rect(screen, gray, rect)        
        fontMgr.Draw(screen, 'arial', 24, 'Arial 24 left center, anti-aliased',
            rect, white, 'left', 'center', True) += 75
        if QUIT in [event.type for event in pygame.event.get()]:
            doQuit = True
if __name__ == '__main__':
    # Execute the demo code if this file is run directly from the command line.
    # Do not run demo if file is imported.

our projects welcomes all python game, art, music, sound, video and multimedia projects. If they use pygame or not.
recent releases
Oct 23, 2016

Oct 22, 2016

Oct 17, 2016

Oct 11, 2016

Oct 10, 2016

Oct 3, 2016

Oct 1, 2016

Sep 19, 2016

Sep 17, 2016

Aug 30, 2016

... more!
for pygame related questions, comments, and suggestions, please see help (lists, irc)