[Tutor] Command not issued until after escape from loop

David Hutto dwightdhutto at yahoo.com
Mon Mar 15 07:58:12 CET 2010



--- On Mon, 3/15/10, David Hutto <dwightdhutto at yahoo.com> wrote:

> From: David Hutto <dwightdhutto at yahoo.com>
> Subject: Command not issued until after escape from loop
> To: tutor at python.org
> Date: Monday, March 15, 2010, 2:15 AM
> In the following code, the portion
> I'm having a problem with is outlined in stars, but since
> the overall code was short, I included it, just in case
> something else might be hindering the process.
> 
> When I execute the script, it shows my main window, then if
> I press the CKEY it's *supposed* to call the cleanSlate()
> function, which grabs and deletes objects in the contents of
> another window.
> 
> My problem is, it doesn't execute cleanSlate() until I hit
> the ESCKEY, or the QKEY. In the original example code I'm
> using as a template(I put in the ev() portion of the main
> template below my current code, so maybe someone could see
> where I deviated from the original, and why the differences
> in implementing redraw) , it's setup in the same manner. 
> 
> Why would it not execute immediately(during the main loop)
> in mine, but in the original it does?
> 
> import Blender
> from Blender.BGL import *
> from Blender import Draw, Scene, Object, Mesh
> R = G = 0
> B = A = 1
> title = "Basic Object Manipulation"
> instructions = "Select an object to manipulate"
> len1 = Draw.GetStringWidth(title)
> len2 = Draw.GetStringWidth(instructions)
> 
> # Removes default objects in scene
> 
> def cleanSlate(scn):
>         for ob in
> scn.objects:
>            
>     if ob.getType == 'Mesh' or 'Camera':
>            
>            
> scn.objects.unlink(ob)
> 
> #defining the window
> def show_win():
>        
> glClearColor(R,G,B,A)         
>       # define color used to clear buffers 
>        
> glClear(GL_COLOR_BUFFER_BIT)     
>    # use it to clear the color buffer
>        
> glColor3f(0.35,0.18,0.92)         
>   # define default color
>        
> glColor3f(.0,0.0,0.0)         
>       # change default color for next item
>         glRecti(10, 450,
> 20+len2, 113)       # sets a box
> border
>        
> glColor3f(0.2,0.2,0.2)         
>      # change default color for next
> item
>        
> glRasterPos2i(14,435)         
>       # move cursor
>        
> Draw.Text(title)           
>          # draw this text
> there
>        
> glRasterPos2i(14,410)         
>       # move cursor again
>        
> Draw.Text(instructions)   # draw another msg
> ******************************************************************   
>     
> # defining the event handling list
> def ev(evt, val):
>         scn =
> Scene.getCurrent()
>         if evt == Draw.ESCKEY
> or evt == Draw.QKEY:
>            
>     Draw.Exit()
>         elif not val:
>            
>     return
>         elif evt ==
> Draw.CKEY: 
>            
>     cleanSlate(scn) 
>         else:
>            
>     return
>         Draw.Redraw(1)
> ******************************************************************
> 
> # build the window
> Draw.Register(show_win, ev, None)      #
> start the main loop
> 
> 
> #End code
> 
> 
> This is the original ev()
> **********************************************************
> 
> def ev(evt, val):           
>           # event callback for
> Draw.Register()
>    global R,G,B,A       
>            
>    # ... it handles input events
>    if evt == Draw.ESCKEY or evt ==
> Draw.QKEY:
>      Draw.Exit()     
>                
>   # this quits the script
>    elif not val: return
>    elif evt == Draw.LEFTMOUSE: R = 1 - R
>    elif evt == Draw.MIDDLEMOUSE: G = 1 - G
>    elif evt == Draw.RIGHTMOUSE: B = 1 - B
>    elif evt == Draw.WHEELUPMOUSE:
>      R += 0.1
>      if R > 1: R = 1
>    elif evt == Draw.WHEELDOWNMOUSE:
>      R -= 0.1
>      if R < 0: R = 0
>    else:
>      return       
>                
>      # don't redraw if nothing changed
>    Draw.Redraw(1)
> 
> 
> TIA,
> David
> 
> 
>       
> 

The revised question to this, after messing around a little more, is why does the loop hold the cleanSlate() function until ESC, or Q, but not hold on to the mouse events, which it executes immediately?

I know the ESC, and Q are not triggering the function call, because it doesn't execute on ESC, or Q if the action to call it isn't performed during the loop.


David


      


More information about the Tutor mailing list