Difference between revisions of "CSC111 Lab 12 2014"

From dftwiki3
Jump to: navigation, search
(A Bit of Hacking)
(A Bit of Hacking)
Line 81: Line 81:
 
* Figure out where the '''menu''' is located in the '''graphics111.py''' program, and change its color to red.  All the symbols should show up in red when your modification is over.
 
* Figure out where the '''menu''' is located in the '''graphics111.py''' program, and change its color to red.  All the symbols should show up in red when your modification is over.
 
<br />
 
<br />
 +
=Adding a Call-Back Function=
 +
<br />
 +
<source lang="python", highlight="17-18,25">
 +
from graphics111 import *
 +
 +
MAXWIDTH  = 600
 +
MAXHEIGHT = 400
 +
 +
class Car:
 +
    def __init__(self, x, y, w, h, color ):
 +
        self._body = Rectangle( x, y, w, h, color )
 +
        self._w1  = Wheel( x+w//4, y+h, w//4 )
 +
        self._w2  = Wheel( x+3*w//4, y+h, w//4 )
 +
       
 +
    def draw( self, canvas ):
 +
        self._body.draw( canvas )
 +
        self._w1.draw( canvas )
 +
        self._w2.draw( canvas )
 +
 +
def mouseEvent( win, canvas, x, y ):
 +
    print( "Caught an event. Received x=%d, y=%d" % (x,y) )
 +
   
 +
def main():
 +
    global menu
 +
 +
    win = GraphicsWindow(MAXWIDTH, MAXHEIGHT)
 +
    canvas = win.canvas()
 +
    canvas.setCallbackFunction( mouseEvent )   
 +
 +
    menu = Menu()
 +
    menu.draw( canvas )
 +
   
 +
    p1 = Car( 100, 100, 50, 20, (250, 250, 0) )
 +
    p1.draw( canvas )
 +
 +
    win.wait()
 +
    win.close()
 +
 +
main()
 +
</source>

Revision as of 19:02, 21 April 2014

--D. Thiebaut (talk) 18:47, 21 April 2014 (EDT)


Building a car using the Graphics111 library

  • Get a copy of the graphics111.py library
  • Save it in your main directory (where you keep you python programs) and save it as graphics111.py
  • Create a car using the new classes now available in the graphics111 library. Call it lab12.py.


from graphics111 import *

MAXWIDTH  = 600
MAXHEIGHT = 400

class Car:
    def __init__(self, x, y, w, h, color ):
        self._body = Rectangle( x, y, w, h, color )
        self._w1   = Wheel( x+w//4, y+h, w//4 )
        self._w2   = Wheel( x+3*w//4, y+h, w//4 )
        
    def draw( self, canvas ):
        self._body.draw( canvas )
        self._w1.draw( canvas )
        self._w2.draw( canvas )
        
def main():    
    win = GraphicsWindow(MAXWIDTH, MAXHEIGHT)
    canvas = win.canvas()

    p1 = Car( 100, 100, 50, 20, (250, 250, 0) )
    p1.draw( canvas )

    win.wait()
    win.close()

main()


  • Notice how short the program is now that the classes for the wheels and rectangles are in the graphics111 library!


Adding A Menu


  • Add a menu at the top left of the window. Don't try to activate it, it won't respond yet...


from graphics111 import *

MAXWIDTH  = 600
MAXHEIGHT = 400
class Car:
    def __init__(self, x, y, w, h, color ):
        self._body = Rectangle( x, y, w, h, color )
        self._w1   = Wheel( x+w//4, y+h, w//4 )
        self._w2   = Wheel( x+3*w//4, y+h, w//4 )
        
    def draw( self, canvas ):
        self._body.draw( canvas )
        self._w1.draw( canvas )
        self._w2.draw( canvas )
        
def main():
    win = GraphicsWindow(MAXWIDTH, MAXHEIGHT)
    canvas = win.canvas()

    menu = Menu()
    menu.draw( canvas )
    
    p1 = Car( 100, 100, 50, 20, (250, 250, 0) )
    p1.draw( canvas )

    win.wait()
    win.close()

main()


A Bit of Hacking


  • Figure out where the menu is located in the graphics111.py program, and change its color to red. All the symbols should show up in red when your modification is over.


Adding a Call-Back Function


from graphics111 import *

MAXWIDTH  = 600
MAXHEIGHT = 400

class Car:
    def __init__(self, x, y, w, h, color ):
        self._body = Rectangle( x, y, w, h, color )
        self._w1   = Wheel( x+w//4, y+h, w//4 )
        self._w2   = Wheel( x+3*w//4, y+h, w//4 )
        
    def draw( self, canvas ):
        self._body.draw( canvas )
        self._w1.draw( canvas )
        self._w2.draw( canvas )

def mouseEvent( win, canvas, x, y ):
    print( "Caught an event. Received x=%d, y=%d" % (x,y) )
    
def main():
    global menu 

    win = GraphicsWindow(MAXWIDTH, MAXHEIGHT)
    canvas = win.canvas()
    canvas.setCallbackFunction( mouseEvent )    

    menu = Menu()
    menu.draw( canvas )
    
    p1 = Car( 100, 100, 50, 20, (250, 250, 0) )
    p1.draw( canvas )

    win.wait()
    win.close()

main()