At 01:16 PM 3/13/2008 -0700, Warren wrote:

>David,
> 
>There is a known problem with Pygame and IDLE.  (Something about IDLE not 
>running the program in a separate process.)  If you just run the program form 
>a command window, or use a different editor (like SPE) you wouldn't see that 
>problem about closing the window.

Well, it's probably not the TKinter "dueling event loops" problem. (PyGame 
doesn't use TKinter for its own event loop.)  But I do see an FAQ at 
http://www.pygame.org/wiki/search.php?query=IDLE and the proposed solution is 
to make sure there is always a call to pygame.quit().  The example in the FAQ 
doesn't work, but I see what they are trying to do.  Here is how I would write 
the final loop:  
while True: 
    event = pygame.event.wait() 
    if event.type == pygame.QUIT: 
        break 
    if event.type == pygame.MOUSEBUTTONDOWN: 
        print "Enter new data"

pygame.quit() 
Now there is no problem running from IDLE.

>Changing the program so it updates as the calculation is ongoing is certainly 
>possible.

I'll play around with this some more.  I'm very pleased with the documentation 
on PyGame.  Without knowing anything about the program, I was able to find the 
functions and event types used in the snippet above.

Many thanks for your help.

-- Dave


>----- Original Message ----
>From: David MacQuigg <[EMAIL PROTECTED]>
>To: Warren Sande <[EMAIL PROTECTED]>
>Sent: Thursday, March 13, 2008 2:51:00 PM
>Subject: Re: [Edu-sig] Introducing Python to Engineering Students
>
>At 08:19 PM 3/12/2008 -0700, Warren Sande wrote:
>
>>By the way, here is a non-OO version of a the fractals program that uses 
>>Pygame to display the output.
>
>Very nice!  I installed PyGame under Python25/Lib/site-packages, using the 
>Windows installer from 
><http://www.pygame.org/install.html>http://www.pygame.org/install.html, and 
>ran the script below from my favorite IDE (IDLE).  I wish Unix installs would 
>go so smoothly.
>
>The only problem I noticed is that the CPU runs 100% and doesn't stop if you 
>forget to click the X on the PyGame window.  When I do click the X, the event 
>loop stops, but he window remains.  If I click the X again, I get Microsoft's 
>"program is not responding" dialog, and its "please tell Microsoft" follow-on. 
> There must be a better way to close this window.
>
>Also, it would be nice if we could show the window as it is being painted, and 
>allow students to interrupt a long computation and try different coordinates.
>
>-- Dave
>
>
>>#-------------------------
>># Simple fractal program using Pygame to display results
>># (Based on Kirby Urner's OO version)
>>import pygame, sys
>>palette = [(0,0,0)]
>> 
>>def mkpalette():
>>    global palette
>>    for i in range(0,255):
>>        palette.append((i*5%200 + 20, i*7%200 + 20, i*11%200 + 20))
>>    return palette
>>    
>>def compute_fractal(n, uleft_x, uleft_y, lright_x, lright_y):
>>    global pixels
>>    xwidth = lright_x - uleft_x
>>    ywidth = uleft_y  - lright_y 
>>    pixels = []
>>    for x in range (500):
>>        pixel_row = []
>>        for y in range (500):
>>            percentx = x/500.0
>>            percenty = y/500.0
>>            xp = uleft_x + percentx * xwidth
>>            yp = uleft_y - percenty * ywidth
>>            z = complex(xp,yp)
>>            o = complex(0,0)
>>            dotcolor = 0
>>            for trials in range(n):
>>                if abs(o) <= 2.0:
>>                    o = o**2 + z
>>                else:
>>                    dotcolor = trials
>>                    break
>>            pixel_row.append(palette[dotcolor])
>>        pixels.append(pixel_row)
>>    
>>mkpalette()
>>pixels = []
>>print "computing fractal..."
>>compute_fractal(64, -2, 1.25, 0.5, -1.25)
>>print "done."
>>screen = pygame.display.set_mode((500,500))
>>f_surf = pygame.Surface((500, 500))
>>for x in range(500):
>>    for y in range(500):
>>        f_surf.set_at((x, y), pixels[x][y])
>>screen.blit(f_surf, [0,0,500,500])
>>pygame.display.flip()
>>while True:
>>    for event in pygame.event.get():
>>        if event.type == pygame.QUIT:
>>            sys.exit()
>>#-------------------------
>
>
>
>>----- Original Message ----
>>From: Warren Sande <<mailto:[EMAIL PROTECTED]>[EMAIL PROTECTED]>
>>To: <mailto:edu-sig@python.org>edu-sig@python.org
>>Sent: Tuesday, March 11, 2008 12:20:02 AM
>>Subject: Re: [Edu-sig] Introducing Python to Engineering Students
>>
>>David,
>>
>>For output graphics, you might want to have a look at 
>><<http://www.pygame.org/>http://www.pygame.org/>Pygame.  It is a wrapper for 
>>the SDL library.  It has functionality for creating graphics windows, 
>>drawing, sprites, etc.  But what might be of interest for you is the simple 
>>set_at(x,y) method, to set the color of individual pixels in a window.
>>
>>I have found the Pygame documentation to be pretty good.
>>
>>Here is a simple example of plotting a sinewave using set_at()
>>
>>#-----------------------------
>>import pygame, sys, math
>>screen = pygame.display.set_mode([640,480])
>>for x in range(0, 640):
>>    y = int(math.sin(x/640.0 * 4 * math.pi) * 200 + 240)
>>    screen.set_at([x, y],[255,0,0])
>>pygame.display.flip()
>>while True:
>>    for event in pygame.event.get():
>>        if event.type == pygame.QUIT:
>>            sys.exit()
>>#------------------------------
>>
>>Warren Sande
>
>



_______________________________________________
Edu-sig mailing list
Edu-sig@python.org
http://mail.python.org/mailman/listinfo/edu-sig

Reply via email to