CSC111 Event-Driven Programming with Graphics111.py 2014

From dftwiki3
Revision as of 08:44, 20 April 2014 by Thiebaut (talk | contribs)
Jump to: navigation, search

--D. Thiebaut (talk) 08:41, 20 April 2014 (EDT)




Contents



Introduction


This program is based on Horstmann and Necaise's graphics library. The new version sports several new additions:

  • A Circle class that is specified by its center coordinates, x and y, its radius, and its color
  • Wheel class that is made of two concentric circles, the outer one black, the inner one grey. The wheel object is specified by its center coordinates, and its outer radius
  • A Rectangle class that is specified by the coordinates of its top-left corner, its width, height, and color.
  • A Polygon class that is specified by a list of x,y coordinates (at least 3 pairs of coordinates), and its color.
Example:


from graphics111 import Polygon

def main():
    global menu 
    
    win = GraphicsWindow(MAXWIDTH, MAXHEIGHT)
    canvas = win.canvas()

    p1 = Polygon( (100, 100, 150, 50, 350, 50, 400, 100), 
                  (255, 0, 0 ) )
    p1.draw( canvas )

    win.wait()
    win.close()


  • A Menu class that provides 4 basic buttons: a plus symbol, a minus symbol, a left-arrow symbol, and a right arrow symbol. For the menu to work, one must setup a call-back function (see below):


Example


def main():
    global menu 
    
    win = GraphicsWindow(MAXWIDTH, MAXHEIGHT)
    canvas = win.canvas()
    
    canvas.setCallbackFunction( mouseEvent )    
    canvas.setBackground( 0, 250, 250 )

    menu = Menu(  )
    menu.draw( canvas )

    win.wait()
    win.close()


  • A call-back functionality. The main graphics library can be made aware of events such as mouse clicks, and we can define our own function that should be called when the mouse is clicked over the canvas. This is what a call-back function is. This way we can have a function that can modify the canvas in some way when the mouse is clicked at different locations on the canvas.
Example


def mouseEvent( win, canvas, x, y ):
    global menu
    
    # has a menu button been clicked?
    # if so define an action for each one

    button = menu.buttonClicked( x, y )

    if button == "LeftArrow":
        print( "left-arrow clicked!" )
        return
    if button == "RightArrow":
        print( "right-arrow clicked!" )
        return
    if button == "Minus":
        print( "minus clicked!" )
        return
    if button == "Plus":
        print( "plus clicked!" )
        return

def main():
    global menu 
    
    win = GraphicsWindow(MAXWIDTH, MAXHEIGHT)
    canvas = win.canvas()
    
    canvas.setCallbackFunction( mouseEvent )    
    canvas.setBackground( 0, 250, 250 )

    menu = Menu(  )
    menu.draw( canvas )

    win.wait()
    win.close()