2016-09-28 2 views
0

Ceci est un problème de code pour Python à l'aide de graphics.py 3.5.2 John Zelle:Comment dessiner un tracé avec des graphiques Zelle?

J'ai passé une bonne quantité de temps à chercher la réponse ici, mais je ne peux pas le comprendre. La fonction undraw() existe exactement comme getMouse(). Mais il semble que cela ne fonctionne pas pour la commande plot(), seule la commande draw(). Qu'est-ce que je fais mal? Et comment puis-je garder la fenêtre ouverte, mais effacer la précédente avant que la suivante ne soit dessinée?

documentation pdf pour les fonctions de graphics:

        http://mcsp.wartburg.edu/zelle/python/graphics/graphics.pdf

win = GraphWin("Plot",500,500) # Creates a window 

for m in range(0,j): # Loop for each function 
    # Randomizes a color for each function 
    color = random.choice(['red','black','green','yellow','pink','blue']) 
    for h in range(0,t): # Loop for each pair of values "x,y" 
     # Find points and plot each point in win 
     win.plot(axis[h],points[m][h],color) 
    win.getMouse() # Pause before clicking 
    win.undraw() # AttributeError: 'GraphWin' object has no attribute 'undraw' 
+1

Pas assez d'informations ... si + Fermer pour l'instant . Ajouter des choses comme: quelle langue? quelle lib? qu'est-ce que "gagner" et où est-il défini/déclaré? – Spektre

Répondre

0

Le premier problème est que undraw() est une méthode de GraphicsObject, non GraphWin, donc win.undraw() est tout simplement inexact.

Le deuxième problème est que plot() est une méthode de paramétrage de pixel de bas niveau qui ne tient pas compte de ce qu'elle a fait au niveau de Zelle Graphics, contrairement aux objets qui sont dessinés.

Cependant, le fondement est Tkinter qui fait garder une trace des objets qu'elle en tire, GraphWin est une sous-classe de toile, de sorte que vous pouvez faire:

win = GraphWin("Plot", 500, 500) # Creates a window 

for m in range(j): # Loop for each function 
    color = random.choice(['red', 'black', 'green', 'yellow', 'pink', 'blue']) # Randomizes a color for each function 
    for h in range(t): # Loop for each pair of values "x, y" 
     win.plot(axis[h], points[m][h], color) # Find points and plot each point in win 
    win.getMouse() # Pause before clicking 
    win.delete("all") # Clear out old plot 
+0

Je pense que votre réponse serait plus claire si vous indiquiez que 'win.delete (" all ")' appelait la méthode 'Canvas.delete()' héritée (et lui transmettait la balise prédéfinie spéciale '" all "'). Les gens peuvent ne pas réaliser que 'GraphWin' n'a pas sa propre définition d'une méthode par ce nom. – martineau