2016-05-16 1 views
0

Je suis en train de créer un programme où l'utilisateur clique dans une fenêtre, et cela crée une liste de points enregistrés qui sont également dessinés dans la fenêtre. L'utilisateur peut cliquer autant de fois qu'il le souhaite, mais une fois qu'il clique dans le rectangle "Terminé" en bas à gauche, la liste est complète.Dressez une liste des points relevés de clics de souris dans une fenêtre graphics.py

J'ai collé sur la création Gotten la boucle qui permet à l'utilisateur de tracer les points jusqu'à ce qu'ils « OK ».

Voici ce que j'ai jusqu'à présent (je sais que je manque beaucoup):

from graphics import * 
def main(): 
    plot=GraphWin("Plot Me!",400,400) 
    plot.setCoords(0,0,4,4) 


    button=Text(Point(.3,.2),"Done") 
    button.draw(plot) 
    Rectangle(Point(0,0),Point(.6,.4)).draw(plot) 

    #Create as many points as the user wants and store in a list 
    count=0 #This will keep track of the number of points. 
    xstr=plot.getMouse() 
    x=xstr.getX() 
    y=xstr.getY() 
    if (x>.6) and (y>.4): 
     count=count+1 
     xstr.draw(plot) 
    else: #if they click within the "Done" rectangle, the list is complete. 
     button.setText("Thank you!") 


main() 

Quelle est la meilleure façon de créer une liste de points mémorisés du clic de l'utilisateur dans la fenêtre graphique? Je prévois d'utiliser ces points plus tard, mais je veux juste que les points soient stockés en premier.

+0

trop large et opinion fondée (en état) ... Il suffit de créer le déplacement de la souris/down/up événements et stocker la liste quelque part. Je ne vois rien dans votre code. Au lieu de cela, vous êtes en train de polir une boucle qui n'est pas une bonne idée. Ajoutez les tags de langue/IDE et OS avec lesquels vous travaillez. Je recommande fortement de regarder ceci: [un simple glisser-déposer par exemple en C++/VCL/GDI] (http://stackoverflow.com/a/20924609/2521214) avec mon exemple simple (fichier zip projet complet + exe inclus) qui peut ajouter quelques types d'objets sur l'écran, les déplacer, les supprimer ... – Spektre

Répondre

0

Les principaux problèmes avec votre code sont les suivants: vous manque une boucle pour recueillir et points de test; votre test and pour voir si l'utilisateur a cliqué dans la boîte doit être un test or; il n'y a pas assez de temps pour que l'utilisateur voie le "Merci!" message avant la fermeture de la fenêtre.

Pour récupérer vos points, vous pouvez utiliser un tableau et au lieu de la variable count, laissez la longueur du tableau représentent le nombre. Ci-dessous est une reprise de votre code qui aborde les questions ci-dessus:

import time 
from graphics import * 

box_limit = Point(0.8, 0.4) 

def main(): 
    plot = GraphWin("Plot Me!", 400, 400) 
    plot.setCoords(0, 0, 4, 4) 


    button = Text(Point(box_limit.getX()/2, box_limit.getY()/2), "Done") 
    button.draw(plot) 
    Rectangle(Point(0.05, 0), box_limit).draw(plot) 

    # Create as many points as the user wants and store in a list 
    point = plot.getMouse() 
    x, y = point.getX(), point.getY() 

    points = [point] # This will keep track of the points. 

    while x > box_limit.getX() or y > box_limit.getY(): 
     point.draw(plot) 
     point = plot.getMouse() 
     x, y = point.getX(), point.getY() 
     points.append(point) 

    # if they click within the "Done" rectangle, the list is complete. 
    button.setText("Thank you!") 

    time.sleep(2) # Give user time to read "Thank you!" 
    plot.close() 

    # ignore last point as it was used to exit 
    print([(point.getX(), point.getY()) for point in points[:-1]]) 

main()