来自graphics.py的线对象没有绘图

时间:2016-05-10 22:37:43

标签: python graphics line draw

我正在使用python图形模块(John Zelle)。我之前从未遇到过任何问题,我可能只是忽略了一些东西,但我找不到它。我正在尝试绘制一个tic tac toe board。线条没有插入.Shell说错误是在graphics.py中,但是我已经从不同来源重新加载它,甚至掠过它,并且无法弄清楚我做错了什么。请帮忙。

#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

1 个答案:

答案 0 :(得分:0)

经过一些挖掘graphics.py的内在机制后,我注意到你有一些奇怪的东西:

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

对于我来说,查看文档字符串似乎有点奇怪:

  

设置从(x1,y1)开始运行的窗口坐标   左下角到右上角的(x2,y2)。

请注意,如果您使用IDLE,则可以通过将win设为全局或执行GraphWin.setCoords(来查看此文档字符串,并且文档字符串应显示在(

image of the docstring explained above

因此,您将屏幕定义为从左下角的(8,1)到右上角的(6,1)......等等,是什么?

这意味着不仅您的x坐标非常向后,而且Line(Point(2,1),Point(2,5))行甚至不在8-6的x范围内。

画布的高度从1到1,因为它的高度为 0 ,导致未定义的行为。 (因此ZeroDivisionError

我认为你想要的跨度更像:

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

这样可以在屏幕上正确显示内容,但我希望您能够恰当地调整确切的数字:)