首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法在PythonWin中多次运行海龟图形脚本

无法在PythonWin中多次运行海龟图形脚本
EN

Stack Overflow用户
提问于 2019-03-23 07:45:41
回答 2查看 39关注 0票数 1

学习Python并使用PythonWin编写简单的海龟图形脚本。该脚本将仅从PythonWin执行一次。在随后的尝试中,脚本挂起在创建海龟类实例x=turtle.Turtle()的行上。我需要重新启动PythonWin才能运行脚本。但是,同一个脚本可以在IDLE中多次执行。

使用Python3.7.2(64位)和PythonWin 3.7 (64位)

下面是代码

代码语言:javascript
复制
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()

在调试器中运行脚本并得到以下错误

代码语言:javascript
复制
>>> 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
EN

回答 2

Stack Overflow用户

发布于 2019-03-24 01:39:56

有几个建议:完全删除这一行:

代码语言:javascript
复制
wn.exitonclick()

或者,如果这不能让事情变得更好,请将其替换为:

代码语言:javascript
复制
wn.mainloop()

通常,在运行的Python映像中,turtle是不可重入的。它在重新启动时失败,并显示Terminator。一旦海龟退出,就完了。但一些交互式环境知道这一点,因此它们专门处理mainloop()调用。或者不是。您的环境可能没有设置为处理exitonclick,它是一个mainloop()调用,与调用turtle.bye()的事件处理程序相结合。

票数 0
EN

Stack Overflow用户

发布于 2022-01-01 22:35:35

该模块使用类变量_RUNNING,当在spyder中运行时,该变量在两次执行之间保持不变,而不是将其作为自包含脚本运行。我已经请求更新模块。

同时,使用替代方法/工作示例

1)

代码语言:javascript
复制
import importlib
import turtle
importlib.reload(turtle)
wn = turtle.Screen()
wn.bgcolor("lightgreen")
tess = turtle.Turtle()
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()

代码语言:javascript
复制
import importlib
import turtle
importlib.reload(turtle)
wn = turtle.Screen()
turtle.TurtleScreen._RUNNING=True
wn.bgcolor("lightgreen")
tess = turtle.Turtle()
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()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55309161

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档