[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

Re: [pygame] program crashes



Hi,

Yes, it looks like a bug. But there may be a simple workaround. Try replace line 68 with this:

    myFont = pygame.font.Font(None, 20)

If that fails then possibly the default font that ships with Pygame is not being installed in the proper place.

Lenard Lindstrom

On 23/09/10 06:30 AM, kevin hayes wrote:
Well I put part of the traceback into google and apparently some other people have had the same problem: www.pyedpypers.org/forum/viewtopic.php?f=3&t=937....his <http://www.pyedpypers.org/forum/viewtopic.php?f=3&t=937....his> solution was to use a different version of python. The thing is that I'm using Python 2.5 just like the book, and I'm using pygame 1.9.1release-py2.5 which is for python 2.5! On Thu, Sep 23, 2010 at 5:38 AM, LukePaireepinart <rabidpoobear@xxxxxxxxx <mailto:rabidpoobear@xxxxxxxxx>> wrote:

    Looks to me like you either found a bug in the core pygame code
    for loading the system font on Mac or you are calling that method
    wrong. I checked the method and it seems like you should be able
    to do what you're doing; it shouldn't find a sysfont called none
    so it should load the default.
    If no one else gets around to it, I'll give it a test on my Mac
    after work and let you know.

    -----------------------------
    Sent from a mobile device with a bad e-mail client.
    -----------------------------

    On Sep 23, 2010, at 6:41 AM, kevin hayes <kevinosky@xxxxxxxxx
    <mailto:kevinosky@xxxxxxxxx>> wrote:

    > Can someone tell me what to do (or what I need to get) to get
    this program to work properly?
    > When I run the code(straight out of the book), I get this:
    >
    > Traceback (most recent call last):
    >   File "/Users/kevinhayes/Desktop/code/ch05/paint.py", line 107,
    in <module>
    >     main()
    >   File "/Users/kevinhayes/Desktop/code/ch05/paint.py", line 102,
    in main
    >     myLabel = showStats(drawColor, lineWidth)
    >   File "/Users/kevinhayes/Desktop/code/ch05/paint.py", line 67,
    in showStats
    >     myFont = pygame.font.SysFont("None", 20)
    >   File
    "/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/pygame/sysfont.py",
    line 555, in SysFont
    >     initsysfonts()
    >   File
    "/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/pygame/sysfont.py",
    line 522, in initsysfonts
    >     fonts = initsysfonts_darwin()
    >   File
    "/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/pygame/sysfont.py",
    line 422, in initsysfonts_darwin
    >     _search_osx_font_paths(fonts)
    > UnboundLocalError: local variable 'fonts' referenced before
    assignment
    >
    >
    >
    > ********************************
    >
    > here is the code:
    >
    > """ paint.py
    >     a simple paint program"""
    >
    > import pygame
    >
    > def checkKeys(myData):
    >     """test for various keyboard inputs"""
    >
    >     #extract the data
    >     (event, background, drawColor, lineWidth, keepGoing) = myData
    >     #print myData
    >
    >     if event.key == pygame.K_q:
    >         #quit
    >         keepGoing = False
    >     elif event.key == pygame.K_c:
    >         #clear screen
    >         background.fill((255, 255, 255))
    >     elif event.key == pygame.K_s:
    >         #save picture
    >         pygame.image.save(background, "painting.bmp")
    >     elif event.key == pygame.K_l:
    >         #load picture
    >         background = pygame.image.load("painting.bmp")
    >     elif event.key == pygame.K_r:
    >         #red
    >         drawColor = (255, 0, 0)
    >     elif event.key == pygame.K_g:
    >         #green
    >         drawColor = (0, 255, 0)
    >     elif event.key == pygame.K_w:
    >         #white
    >         drawColor = (255, 255, 255)
    >     elif event.key == pygame.K_b:
    >         #blue
    >         drawColor = (0, 0, 255)
    >     elif event.key == pygame.K_k:
    >         #black
    >         drawColor = (0, 0, 0)
    >
    >     #line widths
    >     elif event.key == pygame.K_1:
    >         lineWidth = 1
    >     elif event.key == pygame.K_2:
    >         lineWidth = 2
    >     elif event.key == pygame.K_3:
    >         lineWidth = 3
    >     elif event.key == pygame.K_4:
    >         lineWidth = 4
    >     elif event.key == pygame.K_5:
    >         lineWidth = 5
    >     elif event.key == pygame.K_6:
    >         lineWidth = 6
    >     elif event.key == pygame.K_7:
    >         lineWidth = 7
    >     elif event.key == pygame.K_8:
    >         lineWidth = 8
    >     elif event.key == pygame.K_9:
    >         lineWidth = 9
    >
    >     #return all values
    >     myData = (event, background, drawColor, lineWidth, keepGoing)
    >     return myData
    >
    > def showStats(drawColor, lineWidth):
    >     """ shows the current statistics """
    >     myFont = pygame.font.SysFont("None", 20)
    >     stats = "color: %s, width: %d" % (drawColor, lineWidth)
    >     statSurf = myFont.render(stats, 1, (drawColor))
    >     return statSurf
    >
    > def main():
    >     pygame.init()
    >     screen = pygame.display.set_mode((640, 480))
    >     pygame.display.set_caption("Paint:  (r)ed, (g)reen, (b)lue,
    (w)hite, blac(k), (1-9) width, (c)lear, (s)ave, (l)oad, (q)uit")
    >
    >     background = pygame.Surface(screen.get_size())
    >     background.fill((255, 255, 255))
    >
    >     clock = pygame.time.Clock()
    >     keepGoing = True
    >     lineStart = (0, 0)
    >     drawColor = (0, 0, 0)
    >     lineWidth = 3
    >
    >     while keepGoing:
    >         clock.tick(30)
    >
    >         for event in pygame.event.get():
    >             if event.type == pygame.QUIT:
    >                 keepGoing = False
    >             elif event.type == pygame.MOUSEMOTION:
    >                 lineEnd = pygame.mouse.get_pos()
    >                 if pygame.mouse.get_pressed() == (1, 0, 0):
    >                     pygame.draw.line(background, drawColor,
    lineStart, lineEnd, lineWidth)
    >                 lineStart = lineEnd
    >             elif event.type == pygame.KEYDOWN:
    >                 myData = (event, background, drawColor,
    lineWidth, keepGoing)
    >                 myData = checkKeys(myData)
    >                 (event, background, drawColor, lineWidth,
    keepGoing) = myData
    >         screen.blit(background, (0, 0))
    >         myLabel = showStats(drawColor, lineWidth)
    >         screen.blit(myLabel, (450, 450))
    >         pygame.display.flip()
    >
    > if __name__ == "__main__":
    >     main()
    >
    >
    ***********************************************************************************
    >
    > I'm using python 2.5 and pygame-1.9.1release-py2.5 on Mac osx
    10.4.11...any help would be appreciated.  Thanks. Kevin