Невозможно запустить графический скрипт Turtle более одного раза в PythonWin - PullRequest
1 голос
/ 23 марта 2019

Изучение Python и простой кодированный графический скрипт Turtle с использованием PythonWin. Скрипт будет выполняться только один раз из PythonWin. При последующей попытке скрипт зависает на строке, которая создает экземпляр класса turtle, x = turtle.Turtle (). Мне нужно перезапустить PythonWin, чтобы запустить скрипт. Однако один и тот же сценарий можно выполнить несколько раз из IDLE.

Использование Python 3.7.2 (64-разрядная версия) и PythonWin 3.7 (64-разрядная версия)

Вот код

import turtle
wn = turtle.Screen()
wn.bgcolor("lightgreen")
tess = turtle.Turtle() --->hangs here
dist = 5
tess.up()                     # this is new
for pas in range(30):    # start with size = 5 and grow by 2
    tess.stamp()                # leave an impression on the canvas
    tess.forward(dist)          # move tess along
    tess.right(24)              # and turn her
    dist = dist + 2
wn.exitonclick()

Запустил скрипт в отладчике и получил эти ошибки

>>> Unhandled exception while debugging...
Traceback (most recent call last):
  File "C:\Users\Drew\AppData\Local\Programs\Python\Python37\lib\turtle.py", line 2557, in __init__
    self._update()
  File "C:\Users\Drew\AppData\Local\Programs\Python\Python37\lib\turtle.py", line 2660, in _update
    self._update_data()
  File "C:\Users\Drew\AppData\Local\Programs\Python\Python37\lib\turtle.py", line 2646, in _update_data
    self.screen._incrementudc()
  File "C:\Users\Drew\AppData\Local\Programs\Python\Python37\lib\turtle.py", line 1292, in _incrementudc
    raise Terminator
turtle.Terminator

1 Ответ

0 голосов
/ 23 марта 2019

Пара предложений: удалите эту строку в целом:

wn.exitonclick()

или, если это не улучшит ситуацию, замените ее на:

wn.mainloop()

Как правило, в пределахработающий образ Python, черепаха не реентерабельная.Сбой с Terminator при перезапуске.Как только черепаха уходит, все готово.Но некоторые интерактивные среды знают это, поэтому они специально обрабатывают вызов mainloop().Или нет.Возможно, ваша среда не настроена для обработки exitonclick, который является вызовом mainloop() в сочетании с обработчиком событий, который вызывает turtle.bye().

...