IDLE 用户界面

到目前为止,已经学习了使用交互式提示符,系统命令行,Unix 风格脚本,图标点击,模块导入,和 <font style="color:rgb(133, 128, 128);background-color:rgb(249, 250, 250);">exec</font> 调用来运行 Python 代码。如果在寻找更可视化的东西,IDLE 提供了一个用于开发 Python 的可视化用户界面,且它是 Python 系统的一个标准和免费的部分。IDLE 通常被认为是一个集成开发环__(IDE),因为它绑定了许多开发任务到一个单一的视图 [9]。 简而言之,IDLE 是一个编辑、运行、浏览和调试 Python 程序的桌面 GUI,所有的一切都在一个界面中完成。它便携地运行在大多数 Python 平台上,包括微软 Windows,X Windows(在 Linux,Unix 和类 Unix 平台),还有 Mac OS(经典和 OS X)。对大多数人来说,IDLE 代表了一个比输入命令行更易于使用的可替代项,一个比点击图标问题更少的可替代项,一个适合新手开始编辑和运行代码的好方式。另外,你将牺牲一些控制权,但这通常在你 Python 职业生涯的后期才会变得重要。
[9]: IDLE 是官方的一个变体 IDE,但它其实是为了向 Monty Python 成员 Eric Idle 表示敬意而命名的。如果不明白为什么,请参见第 1 章。

IDLE 用户界面——IDLE启动细节

大多数读者应该能立即使用 IDLE,因为它是当今 Mac OS X 和大多数 Linux 安装过程的一个标准组件,且它在 Windows 上被自动地和标准 Python 安装到一起。然而,因为平台各异,需要在打开这个 GUI 前给出一些指引。 技术上讲,IDLE 是一个使用标准库的 tkinter(在 Python 2.X 中名为 Tkinter) GUI 工具包来构建其窗口的 Python 程序。这让 IDLE 可移植 —— 在所有主流桌面平台上工作一致 —— 但也意外着需要在 Python 中得到 tkinter 的支持来使用 IDLE。这个支持在 Windows,Macs 和 Linux 上是标准的,但在一些系统上,它附带一些注意事项,且在各平台上启动可以有差异。下面是一些平台特别的提示:
  • On Windows 7 and earlier, IDLE is easy to start—it’s always present after a Python install, and has an entry in the Start button menu for Python in Windows 7 and earlier (see Figure 2-1, shown previously). You can also select it by right-clicking on a Python program icon, and launch it by clicking on the icon for the files idle.pyw or idle.py located in the idlelib subdirectory of Python’s Lib directory. In this mode, IDLE is a clickable Python script that lives in C:\Python33\Lib\idlelib, C:\Python27\Lib\idlelib, or similar, which you can drag out to a shortcut for one-click access if desired.
  • On Windows 8, look for IDLE in your Start tiles, by a search for “idle,” by browsing your “All apps” Start screen display, or by using File Explorer to find the idle.py file mentioned earlier. You may want a shortcut here, as you have no Start button menu in desktop mode (at least today; see Appendix A for more pointers).
  • Mac OS X 上 IDLE 需要的所有东西都作为操作系统的标准组件存在。IDLE 应该在 MacPython(或 Python N.M) 程序文件夹下面的 Applications 中可以启动。这里注意:由于稳定版本依赖,一些 OS X 版本可能需要安装更新的 tkinter 支持(这里就不对读者介绍这么复杂的东西了);参见 python.org 的下载页获取详情。
  • Linux 上,当前 IDLE 通常也是作为一个标准组件存在。它可能采用在你路径中的一个 idle 可执行文件或脚本的形式;在 shell 中输入它来检查。在一些机器上,它可能需要安装(参见附录 A 获取指示),且在其他系统上可能需要从命令行或图标点击来启动 IDLE 的顶层脚本:运行在 Python 的 /usr/lib 目录中的 idlelib 子目录中的 idle.py(运行 <font style="color:rgb(133, 128, 128);background-color:rgb(249, 250, 250);">find</font> 来找到确切的位置)
因为 IDLE 只是在标准库中的模块搜索路径上的一个 Python 脚本,还可以在任何平台,任何目录在系统命令 shell 窗口通过输入下面的语句来运行它(比如在 Windows 上的命令提示符),然而这将需要参见附录 A 和 Part V 来获取关于 Python 的 <font style="color:rgb(133, 128, 128);background-color:rgb(249, 250, 250);">-m</font> 标记 和 这里需要的 “.” 包语法的更多知识(在本书的这个节点上盲目的信任就足够了):
  1. c:\code> python -m idlelib.idle # Run idle.py in a package on module path
要获取更多关于在 Windows 和其他平台的安装问题和使用的注意事项,确保参考附录 A 和 Python 标准手册中的 “Python 设置和用法” 中关于你的平台的注意事项。

IDLE 用户界面——IDLE基本用法

来看一个实例。图 3-3 显示了在 Windows 上启动 IDLE 后的场景。一开始打开的 Python shell 窗口是主窗口,它运行着一个交互式会话(注意 >>> 提示符)。这就像所有交互式会话那样工作 —— 在这里键入的代码会在键入后立即运行 —— 且作为测试和实验的工具。

3.6界面idle - 图1

图 3-3 IDLE 开发 GUI 的主 Python shell 窗口,这里显示的是运行在 Windows 上的。使用 “文件” 目录来开始(New Window)或更改(Open)一个源文件;使用文本编辑窗口的 “运行” 目录来运行在那个窗口中的代码(Run Module)

IDLE 对它的大多数操作使用带键盘快捷键的类似的目录。要在 IDLE 下创建一个新的脚本文件,使用 在主 shell 窗口中的 File->New,选择 File 下拉菜单,然后选择 New 来打开一个新的文本编辑窗口,在那里你可以输入、保存且运行你的文件代码。使用 File->Open 来打开一个新的文本编辑窗口来展示一个现成文件的代码来编辑和运行。 虽然在本书的图片中并没有完全地显示,IDLE 对键入在主窗口和所有文本编辑窗口中的代码根据语法来着色 —— 关键词是一种颜色,普通文字是另一种,如此等等。这让你对代码中的组件更加一目了然(甚至能帮你发现错误 —— 比如未正常中断的字符串全部是一种颜色)。 要在 IDLE 中运行正在编辑的代码文件,在那个文件的文本编辑窗口使用 Run->Run Module 。也就是说,选择文件的文本编辑窗口,打开窗口的 Run 下拉菜单,然后选择列出的 Run Module 选项(或使用等价的键盘快捷键,在目录中给出了)。如果从打开文件或最后一次修改文件后,又已经修改了它并忘记保存更改(当你埋头编码时的一个常见错误),Python 将让你知道你需要首先保存文件。 当这样运行时,脚本的输出和它可能产生的任何错误信息都出现在主交互窗口中(Python shell 窗口)。比如,在图 3-3 中,在窗口中部 “RESTART” 线后的三行显示了我们的 script1.py 文件在一个单独的编辑窗口中被执行。“RESTART” 这个消息告诉我们用户代码的进程被重启来运行被编辑的脚本,且用来分隔脚本输出(如果 IDLE 在没有用户代码的子进程的情况下被启动,这个消息就不会显示 —— 过一会儿会详述这个模式)

IDLE 用户界面——IDLE可用性功能

和大多数 GUI 一样,学习 IDLE 的最好方式可能就是亲自去尝试它,但一些关键的用法似乎不那么自然。比如,如果想在 IDLE 的主交互式窗口中重复之前的命令,可以使用 Alt-P 组合键来向后滚动命令历史Alt-N 来往前滚动(在一些 Macs 上,尝试使用 Ctrl-P 和 Ctrl-N)。之前的命令将被重新调用并显示,并且可能被编辑和重新运行。 还可以通过将光标 放在(已调用过的)命令上,然后单击并按下回车键来将它们的文字(复制)插入在输入提示符,如下:

3.6界面idle - 图2

或使用标准的剪切 - 粘贴操作,然而这些技术往往涉及更多的步骤(且有时会被意外地触发)。在 IDLE 外,在 Windows 上,可能可以在一个交互式会话中使用箭头键来重新调用命令。 除了命令历史和语法着色,IDLE 还有如下的额外可用性功能:
  • 对编辑器中的 Python 代码自动缩进和解除缩进(空格往后一级)
  • 当输入时单词自动完成(按一次 Tab 来触发)
  • 当键入函数调用的开始 “(” 时,对其弹出的气泡帮助
  • 当在对象名称后键入一个 “.” 且停留或按 Tab 键时出现的对象属性弹出选择列表
这里的一些功能可能不会在每个平台上都适用,且如果发现有些默认值妨碍了个性化的编程风格,可以配置或禁用它们。

IDLE 用户界面——高级的IDLE工具

除了基本的编辑和运行函数还有之前一节的可用性工具外,IDLE 还提供了更高级的功能,包括一个点击程序图形化的调试器 和一个对象浏览器。IDLE 调试器通过 Debug 菜单启用,对象浏览器通过 File 菜单启用。浏览器允许你通过模块搜索路径来导航到文件和文件中的对象;点击文件或对象会在文本编辑窗口打开对应的源。 通过选择主窗口中的 Debug->Debugger 目录选项来初始化 IDLE,

3.6界面idle - 图3

然后通过选择文本编辑窗口中的 Run->Run Module 选项启动脚本;一旦调试器被启用,就可以通过在文本编辑窗口中在行上点击右键来在代码中设置断点

3.6界面idle - 图4

断点可以停止代码执行,显示变量值等等。还可以在调试时观察程序执行 —— 当你步进代码时当前行被标注出来。

3.6界面idle - 图5

为了简化调试操作,你还可以在错误信息文本上使用鼠标右键点击来快速跳转到出错的代码行 —— 一个让调试简单且快速修复和重新运行的技巧。另外,IDLE 的文本编辑器提供了一大堆程序员友好的工具,包括将不会在这里讨论的高级文本和文件搜索操作。因为 IDLE 使用了简单易懂的 GUI 交互,你应该实际动手实验一下这个系统来感觉一下它的其他工具。

IDLE用户界面——用法笔记:IDLE

IDLE 是免费、易于使用,可移植,且在大多数平台上自动可用的。通常向 Python 初学者推荐它因为它简化了一些启动细节且不需要 有系统命令行的经验。然而,和更高级的商业 IDE 比,它有些限制,且对一些人来说似乎比命令行要更笨重一些。 为了避开一些常见的陷阱,下面是 IDLE 初学者应该牢记的问题列表:
  • 当保存文件时必须明确添加 “.py”。在谈论普通文件时就提到过这一点,但它是一个常见的 IDLE 绊脚石,特别对 Windows 用户。在保存文件时,IDLE 不会自动给文件名添加 .py 扩展名。当首次保存文件时,得小心地输入 .py 扩展名。如果不输入,虽然可以从 IDLE(和系统命令行)运行文件,但将不能交互地或从其他模块中导入它。
  • 在文本编辑窗口中,通过选择 Run->Run Module 来运行脚本,而不是通过**交互式导入和重载。在本章前面,我们看到了通过交互式导入文件来运行它是可能的。然而,这个方法会变得复杂因为它要求在更改文件后手动重载文件。作为对比,在 IDLE 中使用 Run->Run Module 目录选项总是运行最近版本**的文件,就像使用系统 shell 命令行运行它一样。如果需要,IDLE 还提示首先保存文件(另一个在 IDLE 外的常见错误)。
  • 只需要重载正在被交互地测试的模块。像系统 shell 命令行,IDEL 的 Run->Run Moduel 目录选项总是运行顶层文件和任何它导入的模块的当前版本。因为这点, Run->Run Module 消除了关于导入的常见困扰。只需要重载那些正在交互式地导入和测试的模块。如果选择使用导入和重载技术而非 Run->Run Module,记住可以使用 Alt-P/Alt-N 组合键来回调之前的命令。
  • 可以自定义 IDLE。要改变在 IDLE 中的文本字体和颜色,在任何 IDLE 窗口的 Options 目录中选择 Configure option。你还可以自定义组合键动作,缩进设置,自动完成,等等更多;参见 IDLE 的 Help 下拉菜单获取更多提示。
  • 当前在 IDLE 中没有清屏选项。这似乎是一个常见的需求(可能因为在类似的 IDE 中这个选项都是有的吧),且它最终可能被添加进来。然而,当前还没有办法清除交互式窗口的文本。如果想清除,可以按住 Enter 键不放,或输入一个 Python 循环来打印一系列的空白行(当然没人真的使用后一种方法,但它听起来比按住 Enter 键更有技术含量!)
  • tkinter GUI 和多线程程序可能在 IDLE 中工作得不是很好。因为 IDLE 是一个 Python/tkinter 程序,如果使用它来运行特定类型的高级的 Python/tkinter 程序,它可能会死机。这在最近版本的 IDLE 中(它在一个进程中运行用户代码,另一个中运行 IDLE GUI 自身)已经变得不那么常见,但一些程序(特别是那些使用多线程的)仍可能导致 GUI 死机。即使只是在代码中调用 tkinter <font style="color:rgb(133, 128, 128);background-color:rgb(249, 250, 250);">quit</font> 函数(退出 GUI 程序的普通方式),如果运行在 IDLE 中(这里可能只有 destory 会更好)也可能导致程序的 GUI 死机。你的代码可能不会显示这些问题,但作为一个经验法则,使用 IDLE 来编辑 GUI 程序,而使用其他选项如点击图标或系统命令行来启动它们总是安全的。当有疑问时,如果代码在 IDLE 中失败了,尝试在 GUI 外来测试它。
  • 如果产生了**连接问题**,尝试在单进程模式中开启 IDLE。这个问题在最近的 Python 中似乎已经消失了,但它仍然影响使用老版本的读者。因为 IDLE 需要在它独立的用户和 GUI 进程之前通信,它有时会在特定平台上启动时有问题(特别的在某些 Window 机器上它有时会无法启动,这是因为防火墙软件阻碍了连接)。如果遇到这种连接错误,可以使用命令行来启动 IDLE,强制它运行在单进程模式下而无需用户代码子进程从而避免了通信问题:它的 -n 命令行标记强制了这个模式。比如,在 Windows 上,开启一个命令行提示符窗口,然后在目录 C:\Python33\Lib\idlelib(如果需要先 <font style="color:rgb(133, 128, 128);background-color:rgb(249, 250, 250);">cd</font> 到那里)运行系统命令行 <font style="color:rgb(133, 128, 128);background-color:rgb(249, 250, 250);">idle.py -n</font><font style="color:rgb(133, 128, 128);background-color:rgb(249, 250, 250);">python -m idlelib.idle -n</font> 命令在任何地方都可以用(见附录 A 的 <font style="color:rgb(133, 128, 128);background-color:rgb(249, 250, 250);">-m</font>
  • 小心一些 IDLE 可用性功能。IDLE 让初学者的学习简单了许多,但它的一些技巧不能在 IDLE GUI 外被应用。比如,IDLE 在它其交互式命名空间中运行脚本,所以代码中的变量自动出现在 IDLE 交互式会话中 —— 不需要总是运行导入命令来访问已经运行过的顶层文件中的名字。这会很方便,但也能导致困惑,因为在 IDLE 环境外,名字必须总是从文件中明确导入来使用的。
当需要代码文件时,IDLE 也会自动切换到那个文件的目录并将其添加到模块导入搜索路径 —— 一个方便的功能,让你可以使用文件和导入模块而无需搜索路径设置,但当在 IDLE 外运行文件时,是不能这样使用的。使用这些功能是没问题的,但不要忘记它们是 IDLE 的行为,而不是 Python 的。

其他的IDE

因为 IDLE 是免费的,可移植的,且是 Python 的一个标准部分,如果确实想使用 IDE,它是一个很好的用来熟悉的首选开发工具。再说一次,如果刚开始学习,我推荐使用 IDLE 来完成本书的练习,除非你已经熟悉并倾向于基于命令行的开发模式。然而,对 Python 开发者来说,有一些替代的 IDE,其中一些比 IDLE 要强大和健壮的多。除了 IDLE,下面是 Python 的一些最经常被使用的 IDE:

Eclipse 和 PyDev

Eclipse 是一个高级的开源 IDE GUI。最开始作为 JAVA IDE 被开发,当你安装了 PyDev(或类似的)插件后,Eclipse 还支持 Python 开发。Eclipse 是 Python 开发的一个流行和强大的选项,且它远远超越了 IDLE 的功能集。它包括对代码自动完成,语法高亮,语法分析,重构,调试,等更多的支持。它的缺点是安装系统庞大且一些功能可能需要共享软件扩展(这个随着时间可能会改变)。然而,当你准备从 IDLE 毕业时,Eclipse/PyDev 组合值得你的关注。

Komodo

一个用于 Python(和其他语言)的全功能的开发环境 GUI,Komodo 包括标准的语法着色,文本编辑,调试,和其他功能。另外,Komodo 提供了许多 IDLE 没有的高级功能,包括项目文件,源控制集成,和正则表达式调试。在写本书时,komodo 不免费,但可以上网查看它的现在状态 —— 它在 ActiveState(还提供了附录 A 提到的 ActivePython 分发软件包)的 www.activestate.com/ 上可见。

用于 Python 的 NetBeans IDE

NetBeans 对 Python 开发者来说是一个拥有支持许多高级功能的强大开源开发环境 GUI:代码完成,自动缩进和代码着色,编辑器提示,代码折叠,重构,调试,代码覆盖率和测试,项目,等等更多。它可能被用来开发 CPython 和 Jython 代码。如同 Eclipse, NetBeans 需要比内置的 IDLE GUI 复杂得多的安装步骤,但被许多人认为是完全值得的。上网搜索最新信息和链接。

PythonWin

PythonWin 是一个免费的仅 Windows 可用的 Python IDE,它作为 ActiveState 的 ActivePython 分发包的一部分发布(并且还可以单独从 Python 官网的资源中获取)。它和 IDLE 差不多,但添加了一些有用的 Windows 独有的扩展;比如,PythonWin 可以支持 COM 对象。当前,IDLE 很可能比 PythonWin 更先进(比如,IDLE 的双进程架构通常让其不会死机)。然而,PythonWin 仍然对 Windows 开发者提供了一些 IDLE 没有提供的工具。参见 activeState.com 获取更多信息。

Wing, Visual Studio 和其他

还有其他 IDE 也在 Python 开发者中流行,包括大部分商业化的 Wing IDE,微软的 Visual Studio (通过一个插件),还有 PyCharm, PyScripter, Pyshield, 和 Spyder—— 但我在这里没有空间来一一介绍它们,且毫无疑问随着时间的流逝会有更多 IDE 出现。事实上,当前几乎每个程序员友好的文本编辑器都对 Python 开发有某种程度的支持(不管是预装的还是单独获取的)。 比如,Emacs 和 Vim 对 Python 都有极强的支持。 IDE 的选择通常是主观的,所以我鼓励你浏览它们来找到适合自己开发风格和目标的工具。要获取更多信息,参见 Python 官网上的可用资源或上网搜索 “Python IDE” 或类似的字样。当今,搜到 “Python editors” 会将你带到一个 wiki 页面,上面维护了许多适合于 Python 编程的 IDE 和文本编辑器选项。