2016-10-05 1 views
0

Ich habe ein Projekt, das ein einfaches Breakout-Spiel mit Python macht. Ich habe ein Problem mit dem Erstellen einer Schaltfläche in einem Grafikfenster.Hinzufügen von Button zu Python graphics.py window

from graphics import* 
win = GraphWin("win",200,150) 
def buttons(): 
    rectangle = Rectangle(Point(30,85),Point(60,55)) 
    rectangle2 = Rectangle(Point(170,85),Point(140,55)) 
    rectangle.setFill("blue") 
    rectangle2.setFill("blue") 
    rectangle.draw(win) 
    rectangle2.draw(win) 

hier Wie kann ich diese Rechtecke als Anstecker, die die Bewegungen „Left“ darstellen, & „Right“ ??

Antwort

1

Unten finden Sie eine einfache Lösung für eine rote, linke Taste, eine grüne, rechte Taste und eine "Exit" -Taste, um das Programm zu beenden. Ich habe die Rechtecke, die die Schaltflächen darstellen, neu angeordnet, so dass P1 die untere linke Ecke und P2 die obere rechte Ecke ist. Dies vereinfacht den Test, um zu sehen, ob der angeklickte Punkt innerhalb der Schaltfläche war. (Können Sie machen den Code anspruchsvollere diese Annahme zu entfernen.)

from graphics import * 

WINDOW_WIDTH, WINDOW_HEIGHT = 200, 150 

win = GraphWin("Simple Breakout", WINDOW_WIDTH, WINDOW_HEIGHT) 

def buttons(): 
    left = Rectangle(Point(25, 55), Point(55, 85)) # points are ordered ll, ur 
    right = Rectangle(Point(145, 55), Point(175, 85)) 
    quit = Rectangle(Point(85, 116), Point(115, 146)) 

    left.setFill("red") 
    right.setFill("green") 
    text = Text(Point(100, 133), "Exit") 
    text.draw(win) 

    left.draw(win) 
    right.draw(win) 
    quit.draw(win) 

    return left, right, quit 

def inside(point, rectangle): 
    """ Is point inside rectangle? """ 

    ll = rectangle.getP1() # assume p1 is ll (lower left) 
    ur = rectangle.getP2() # assume p2 is ur (upper right) 

    return ll.getX() < point.getX() < ur.getX() and ll.getY() < point.getY() < ur.getY() 

left, right, quit = buttons() 

centerPoint = Point(WINDOW_WIDTH/2, WINDOW_HEIGHT/2) 
text = Text(centerPoint, "") 
text.draw(win) 

while True: 
    clickPoint = win.getMouse() 

    if clickPoint is None: # so we can substitute checkMouse() for getMouse() 
     text.setText("") 
    elif inside(clickPoint, left): 
     text.setText("left") 
    elif inside(clickPoint, right): 
     text.setText("right") 
    elif inside(clickPoint, quit): 
     break 
    else: 
     text.setText("") 

win.close() 

Wenn Sie die roten oder grünen Schaltflächen klicken, werden Sie erhalten „links“ oder „rechts“ in der Mitte des Fensters gedruckt, andernfalls kein Text erscheint:

enter image description here