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: