2016-05-10 6 views
1

Ich benutze Python-Grafikmodul (John Zelle). Ich hatte vorher noch nie ein Problem, ich könnte einfach etwas übersehen, aber ich kann es nicht finden. Ich versuche ein Tic Tac Toe Board zu zeichnen. Die Zeilen werden nicht gezeichnet. Die Shell sagt, dass der Fehler in graphics.py ist, aber ich habe es aus verschiedenen Quellen heruntergeladen, habe es sogar überflogen und kann nicht herausfinden, was ich falsch mache. Bitte helfen Sie.Linienobjekt von graphics.py nicht zeichnen


#here is my code sample 
#import graphics library 
from graphics import * 
#build interface 
def interface(): 
    win = GraphWin("Tic Tac Toe", 600,700) 
    win.setCoords(8,1,6,1) 
    #horizontal line #1 
    h1 = Line(Point(2,1),Point(2,5)) 
    h1.draw(win) 
#...there is more but it's repetitive so I won't waste time. 

>>> interface() 
Traceback (most recent call last): 
    File ".../test.py", line 12, in <module> 
    interface() 
    File ".../test.py", line 10, in interface 
    h1.draw(win) 
    File "/LIB/graphics.py", line 450, in draw 
    self.id = self._draw(graphwin, self.config) 
    File "/LIB/graphics.py", line 627, in _draw 
    x1,y1 = canvas.toScreen(p1.x,p1.y) 
    File "/LIB/graphics.py", line 335, in toScreen 
    return self.trans.screen(x,y) 
    File "/LIB/graphics.py", line 386, in screen 
    ys = (self.ybase-y)/self.yscale 
ZeroDivisionError: float division by zero 
+0

Ich habe den Traceback hinzugefügt, den ich beim Ausführen des Codes erhalten habe, wenn Sie etwas anderes haben, verlinken Sie bitte zu dem 'graphics.py', den Sie benutzen, und hinter dem Fehler, den Sie bekommen. –

+0

Danke. Ja, das ist der gleiche Fehler, den ich bekommen habe. Es hat etwas mit meinen Koordinaten zu tun, denn als ich es entfernte, funktionierte es gut. Schätze, ich muss ein wenig mehr üben ... – Seth

+0

Ich glaube nicht, dass das auf Sie zutrifft, Sie geben ihm zwei Punkte mit der gleichen y-Koordinate, so dass der Unterschied in Y 0 ist und es eine Skalierung versucht (notice) die letzte Zeile ist '/ self.yscale'), also würde ich einfach die Bibliothek verfluchen und eine leicht schiefe Linie verwenden. –

Antwort

0

Nach ein wenig von graphics.py durch die inneren Mechanik Graben ich bemerkt, dass Sie etwas ein bisschen perculiar haben:

win.setCoords(8,1,6,1) 

Das ist ein bisschen seltsam für mich an der docstring suchen scheint:

Legen Sie die Koordinaten des Fensters fest, um von (x1, y1) in der unteren linken Ecke zu (x2, y2) i zu laufen in der oberen rechten Ecke.

Beachten Sie, dass, wenn Sie IDLE verwenden, können Sie diese doc-String sehen, indem sie win global oder GraphWin.setCoords( tun und die docstring sollte auf dem (

image of the docstring explained above

Sie definieren Ihren Bildschirm So erscheinen Spanne von (8,1) in der unteren linken Ecke bis (6,1) in der oberen rechten Ecke ... warte, was?

Dies bedeutet, dass nicht nur Ihre x-Koordinaten sehr rückwärts sind, sondern die Linie Line(Point(2,1),Point(2,5)) nicht einmal in der x-Spanne von 8-6.

Und die Höhe Ihrer Leinwand erstreckt sich von 1 bis 1, da es eine Höhe von hat, was zu undefiniertem Verhalten führt. (Daher der ZeroDivisionError)

Ich glaube, Sie wollen eine Spannweite mehr wie:

win.setCoords(0,0,6,7) 

Dies wird auf dem Bildschirm Sachen richtig erhalten Anzeigen, obwohl ich erwarte, dass Sie die genauen Zahlen entsprechend anpassen :)