2016-10-05 6 views
0

J'ai un projet qui est en train de faire un jeu d'évasion simple avec python. J'ai un problème avec la création d'un bouton sur une fenêtre graphique.Ajout d'un bouton à la fenêtre Python graphics.py

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) 

Ici, Comment puis-je faire ces rectangles que les boutons qui représentent les mouvements « de gauche », & « droit » ??

Répondre

1

Voici une solution simple pour un bouton rouge gauche, un bouton vert droit et un bouton "Quitter" pour quitter le programme. J'ai réarrangé les rectangles qui représentent les boutons tels que P1 est le coin inférieur gauche et P2 est le coin supérieur droit. Cela simplifie le test pour voir si le point cliqué était à l'intérieur du bouton. (Vous pouvez rendre le code plus sophistiqué pour éliminer cette hypothèse.)

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() 

Si vous cliquez sur les boutons rouges ou verts, vous aurez « gauche » ou « droite » imprimée dans le centre de la fenêtre, sinon aucun texte n'apparaît: