Я разработал функцию регистрации кликов в прямоугольниках и кружке. Самый левый прямоугольник будет регистрировать щелчки соответственно. Я не могу получить клики, чтобы зарегистрироваться в самом правом прямоугольнике или круге. Что мне здесь не хватает?
Я сделал функцию, которая различает круг и прямоугольник и регистрирует щелчки мыши внутри них.
from graphics import*
from time import sleep
def main():
win,c=make()
blue=Rectangle(Point(0,200),Point(100,300))
blue.draw(win)
blue.setFill("blue")
yellow=Rectangle(Point(500,200),Point(400,300))
yellow.draw(win)
yellow.setFill("yellow")
green=Rectangle(Point(300,0),Point(200,100))
green.draw(win)
green.setFill("green")
dx,dy=3,-6
z=0.1
while True:
c.move(dx,dy)
sleep(z)
center = c.getCenter()
dx,dy = bounce(dx,dy,center)
bump=win.checkMouse()
if bump != None:
if isClicked(bump,blue):
z+=0.05
elif isClicked(bump,yellow):
z-=0.05
elif isClicked(bump,c):
win.close
def bounce(dx,dy,center):
if center.getX()<25 or center.getX()>475:
dx *= -1
if center.getY()<25 or center.getY()>475:
dy *= -1
return dx,dy
def isClicked(click, shape):
if not click:
return False
x,y = click.getX(), click.getY()
if type(shape).__name__ == 'Circle':
center = shape.getCenter()
cx, cy = center.getX(), center.getY()
if ((x-cx)**2 + (y-cy)**2)**.5 <= 25:
return True
else:
x1, y1 = shape.getP1().getX(), shape.getP1().getY()
x2, y2 = shape.getP2().getX(), shape.getP2().getY()
if (x1 < x < x2) and (y1 < y < y2):
return True
return False
def make():
win = GraphWin('Exam2-1',500,500)
win.setBackground('grey')
c = Circle(Point(250,250),25)
c.setFill('blue')
c.draw(win)
return win, c
main()
Теоретически, нажатие на синий прямоугольник должно замедлить движение шара, в то время как нажатие на желтый прямоугольник должно увеличить его. Кроме того, щелчок в круге должен закрыть окно. В настоящее время синий прямоугольник является единственным с функциональностью.