2016-05-10 3 views
1

Я использую графический модуль python (John Zelle). Раньше у меня никогда не было проблемы, я мог бы просто что-то игнорировать, но я не могу найти его. Я пытаюсь нарисовать тик-так-палку. Строки не вписываются. Оболочка говорит, что ошибка в graphics.py, но я перезагрузил ее из разных источников, обезвредил ее и даже не понял, что я делаю неправильно. Пожалуйста помоги.объект линии из 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 
+0

Я добавил трассировку, полученную при запуске кода, если у вас есть что-то другое, пожалуйста, перейдите по ссылке «graphics.py», которую вы используете, и мимо полученной вами ошибки. –

+0

Спасибо. Да, та же ошибка, которую я получал. Это как-то связано с моими координатами, потому что когда я удалил его, он работал нормально. Угадайте, мне нужно немного попрактиковаться ... – Seth

+0

Я не думаю, что это на вас, вы даете ему две точки с одинаковой координатой y, поэтому разница в Y равна 0, и она пробует некоторое разделение с ней для масштабирования (уведомление последняя строка '/ self.yscale'), поэтому я просто проклинаю библиотеку и использую слегка перекошенную строку. –

ответ

0

После немного копаться внутренней механики graphics.py я заметил, у вас есть что-то немного perculiar:

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

Это кажется немного странным для меня, глядя на строку документации:

Установить координаты окна для запуска от (x1, y1) в нижнем левом углу до (x2, y2) i n верхний правый угол.

Обратите внимание, что если вы используете IDLE вы можете увидеть эту строку документации, делая win глобальной или делать GraphWin.setCoords( и строка документации должна появиться на (

image of the docstring explained above

Таким образом, вы определяете ваш экран от (8,1) в левом нижнем углу до (6,1) в верхнем правом углу ... подождите, что?

Это означает, что не только ваши координаты x очень обратные, но линия Line(Point(2,1),Point(2,5)) даже не в диапазоне x 8-6.

И высота ваших холстов простирается от 1 до 1, так как в ней высота , что приводит к неопределенному поведению. (Отсюда ZeroDivisionError)

Я думаю, что вы хотите пролет более как:

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

Это позволит получить материал правильно отображать на экране, хотя я ожидаю, что вы настроить точные цифры надлежащих :)

Смежные вопросы