【问题标题】:Why doesn't Turtle work in Linux command line, but from IDLE?为什么 Turtle 不能在 Linux 命令行中工作,而是在 IDLE 中工作?
【发布时间】:2015-12-01 08:24:33
【问题描述】:

我参加了一个 Python 小组会议。在我安装了 Linux 的笔记本电脑上,我通过终端使用常用命令执行了以下代码(来自《教你的孩子 Python》一书):

import turtle
t = turtle.Pen()
t.speed(0)
turtle.onscreenclick(t.setpos)

Python3.4 TurtleDraw.py

它应该会弹出一个可以接受鼠标光标输入的窗口。相反,窗口会立即出现和消失。另一个人在他的 MacBook 上尝试了类似的事情,结果相同。但是,他通过 IDLE 版本运行了相同的代码,并且确实按预期工作。

IDLE 中有什么东西可以自动与 Turtle 窗口集成吗?如果我希望它通过 Unix 命令行正常运行来运行它,我认为可能需要设置环境变量?

【问题讨论】:

    标签: python linux python-idle turtle-graphics


    【解决方案1】:

    在命令行python xyz.py,告诉 Python 执行程序,完成后退出并清理。在您的turtledraw.py 的情况下,它会删除海龟屏幕,正如您所观察到的。要保持屏幕可见,您必须阻止程序退出。一种方法[1] 是使用-i 选项:python -i xyz.py。这意味着:“当到达程序结束时,切换到'交互模式'而不是退出”。这样做的一种用途是通过检查全局变量的值进行调试。另一种是与图形屏幕交互。不管有没有,这本书应该告诉你在从控制台运行时使用-i

    当您在 IDLE 中编辑 xyz.py 并运行它时,IDLE 会模拟 python -i xyz.py:在运行 xyz.py 之后,它会打开以进行自省或交互。


    [1] 有时防止退出的另一种方法是在程序末尾添加input() 语句,但这可能不适用于 GUI 程序。

    编辑:我用 Python 3.5.0 在 Win10 上测试了 -i 是否适用于 TestDraw.py

    【讨论】:

    • tkinter 程序没有类似消失的原因是它们通常以 mainloop() 调用结束,该调用启动响应输入事件的事件循环。 TurtleDraw.py 程序设置了一些内部变量,但显然不会导致 turtle 调用 mainloop() 或做任何类似的事情。
    • 我没有这本书,但是这本书确实指导它的读者设置 IDLE,所以这是一个没有实际意义的场景。此外,由于它是一本面向儿童的初学者书籍,我不会愿意用真金白银来赌它在那里。但是,我仍然很好奇,并且想再次阅读该章节,只是为了仔细检查是否提到了 -i 选项
    猜你喜欢
    • 2012-10-30
    • 2022-06-14
    • 2016-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-02
    • 2022-11-25
    相关资源
    最近更新 更多