【问题标题】:turtle.done() not working in Spyderturtle.done() 在 Spyder 中不起作用
【发布时间】:2017-04-08 13:23:16
【问题描述】:

这个简单的 Python 脚本:

import turtle

bob = turtle.Turtle()
bob.forward(50)
turtle.done()

在使用 Spyder 运行时产生错误。第一次运行按预期运行,但在那之后,IPython 控制台引发了一个“终结者”。当使用turtle.exitonclick() 而不是turtle.done() 时也会发生同样的情况。我做错了什么?

请注意,从 CLI 运行它可以正常工作。

【问题讨论】:

  • 我也有同样的问题

标签: python spyder turtle-graphics


【解决方案1】:

我没有使用 Spyder,但与其他在类似环境中运行 turtle 时遇到类似问题的人交换了 cmets。

如果你关闭海龟图形窗口,它就死了,不会为你重新打开。如果不重新启动 Spyder,您可以尝试在 turtle.done()(在主循环退出后返回)之后添加一个 turtle.bye()(它会清理一些东西)。然后尝试多次运行您的程序。

【讨论】:

    【解决方案2】:

    我在 Spyder 中多次运行海龟图形程序时遇到问题,我通过转到“工具/首选项”解决了这个问题。在“运行”部分的“控制台”下,选择“在新的专用 Python 控制台中执行”。

    【讨论】:

      【解决方案3】:

      这是因为 turtle 模块(目前大多数参考实现)使​​用一个名为 _RUNNING 的类变量。当在 Spyder 等环境中运行而不是作为独立的 Python 脚本运行时,类变量在执行之间保持为假。有两种解决方法:

      1)

      import importlib
      import turtle
      importlib.reload(turtle)
      bob = turtle.Turtle()
      bob.forward(50)
      turtle.done()
      
      import turtle
      turtle.TurtleScreen._RUNNING=True
      bob = turtle.Turtle()
      bob.forward(50)
      turtle.done()
      

      【讨论】:

      • (这里是 Spyder 维护者)非常感谢您的指点!你知道哪个 Python 版本引入了这个变量吗?
      • 嗨?卡洛斯。 Python2.6 从 2.5 扩展实现引入了该变量。
      • 我已提交和 PR 以在库本身中更新此内容,而不会影响任何其他功能。如果这通过了 cpython 审阅者/维护者,那么我也会尝试建议对其他 repos 进行更改。
      猜你喜欢
      • 2015-09-12
      • 2019-06-11
      • 2018-01-22
      • 2019-03-21
      • 2020-09-13
      • 2021-11-18
      • 2018-06-10
      • 2023-03-21
      • 2016-08-28
      相关资源
      最近更新 更多