2016-03-22 1 views
1

J'utilise le module graphique de référence « graphics.py »Vérifiez si les clics sont dans une forme graphique (cercle)

Comment écrivez-vous une fonction telle que si l'utilisateur clique dans un cercle, il doit retourner vrai sinon, il devrait renvoyer False.

Je ne sais pas trop comment commencer. Je veux tester si les clics d'un utilisateur sont dans une forme ou non.

Répondre

1

Utilisez getMouse(). Cela fait une pause pour un clic de l'utilisateur, puis renvoie la position (en tant que point) de la souris dans une fenêtre. checkMouse() retournera la position de la souris sans nécessiter de clic.

par exemple:

win = GraphWin('Example Window', 100, 100) 
mousePos = win.getMouse() 

maintenant à utiliser pour déterminer si l'utilisateur a cliqué sur un cercle:

def isClicked(circle, mousePos): 
    distance = sqrt(((mousePos.x - circle.x) ** 2) + ((mousePos.y - circle.y) ** 2)) 
    return distance < circle.radius 

Ce serait votre fonction.

Exemple de code qui utiliserait la fonction:

from graphics import * 
from math import sqrt 

def isClicked(circle, mousePos): 
    distance = sqrt(((point.x - circle.x) ** 2) + 
        ((point.y - circle.y) ** 2)) 
    return distance < circle.radius 

def main(): 
    win = GraphWin('Example Window', 100, 100) 
    circle = Circle(Point(50,50), 25) 
    circle.setFill('blue') 
    circle.draw(win) 
    mousePos = win.getMouse() 
    if isClicked(circle, mousePos): 
     print "You clicked in the circle!" 
    else: 
     print "You clicked outside the circle!" 

main() 
+1

Y a-t-il une autre façon d'utiliser le "from math import sort"? –

+0

Demandez-vous cela parce que vous obtenez une erreur lors de l'importation de mathématiques? Vérifiez les typos. c'est s q r t, pas s o r t. Cela signifie "racine carrée". Je pourrais juste effacer, mais je ne peux pas penser à un moyen de calculer si un point est dans le cercle sans utiliser les fonctions sqrt ou sinus. –

+0

Cet exemple de code ne fonctionne pas réellement. La première erreur est: "NameError: nom global 'point' n'est pas défini" en raison d'un paramètre formel mal nommé à 'isClicked()'. Mais fixant cela, avec graphics.py actuel échoue avec, "AttributeError: l'instance de cercle n'a aucun attribut 'x'" en raison d'essayer d'obtenir le 'x' d'un cercle qu'il n'a pas, mais a plutôt un centre qui a un 'x'. – cdlane

0

is there another way without using the "from math import sort"?

Prendre votre demande littéralement, et la correction de bugs dans l'exemple de Dardar Fishcake, nous pouvons le faire de cette façon:

from graphics import * 

def isClicked(circle, point): 
    center = circle.getCenter() 

    distance = ((point.getX() - center.getX()) ** 2 + (point.getY() - center.getY()) ** 2) ** 0.5 

    return distance < circle.radius 

def main(): 
    win = GraphWin('Example', 100, 100) 

    circle = Circle(Point(50, 50), 25) 
    circle.setFill('blue') 
    circle.draw(win) 

    while True: 
     mousePos = win.getMouse() 

     if isClicked(circle, mousePos): 
      print("You clicked in the circle!") 
      break 
     else: 
      print("You clicked outside the circle!") 

    win.close() 

main() 

Ici, nous avons remplacé x ** 0.5 par sqrt(x). Aussi un léger changement dans la logique de l'exemple - celui-ci continuera à accepter les clics jusqu'à ce que vous cliquiez dans le cercle.