IDLE

源代码: Lib/idlelib/


idle是Python的集成开发和学习环境。

Idle具有以下功能:

  • 用100%纯python编码,使用 tkinter 图形用户接口工具包

  • 跨平台:在Windows、Unix和MacOS上基本相同

  • 带有代码输入、输出和错误消息着色的python shell窗口(交互式解释器)

  • 具有多个撤消、Python着色、智能缩进、调用提示、自动完成等功能的多窗口文本编辑器

  • 在任何窗口中搜索,在编辑器窗口中替换,并搜索多个文件(grep)

  • 具有持久断点、单步执行和查看全局和本地命名空间的调试器

  • 配置、浏览器和其他对话框

编辑和导航

编辑器窗口

空闲可能会在编辑器启动时打开窗口,这取决于设置和启动空闲的方式。然后,使用“文件”菜单。给定文件只能有一个打开的编辑器窗口。

标题栏包含文件名、完整路径以及运行窗口的python和idle版本。状态栏包含行号(“ln”)和列号(“col”)。行号以1开头;列号以0开头。

idle假定扩展名为.py*的文件包含python代码,而其他文件不包含。使用运行菜单运行python代码。

键绑定

在本节中,“c”指 Control 在Windows和Unix以及 Command MACOS的关键。

  • Backspace 向左删除; Del 删除到右侧

  • C-Backspace 删除左边的单词; C-Del 删除右侧的单词

  • 箭头键和 Page Up/Page Down 四处走动

  • C-LeftArrowC-RightArrow 词动

  • Home/End 转到行首/行尾

  • C-Home/C-End 转到文件的开始/结束

  • 一些有用的emacs绑定是从tcl/tk继承的:

    • C-a 行首

    • C-e 行尾

    • C-k 终止行(但不放在剪贴板中)

    • C-l 围绕插入点居中窗口

    • C-b 向后移动一个字符而不删除(通常也可以使用光标键进行此操作)

    • C-f 向前移动一个字符而不删除(通常也可以使用光标键执行此操作)

    • C-p 向上移动一行(通常也可以使用光标键进行此操作)

    • C-d 删除下一个字符

标准键绑定(如 C-c 复制和 C-v 粘贴)可能有效。在配置空闲对话框中选择键绑定。

自动缩进

在block opening语句之后,下一行缩进4个空格(在python shell窗口中缩进一个选项卡)。在某些关键字(break、return等)之后,将删除下一行。在主缩进中, Backspace 删除最多4个空格(如果有)。 Tab 插入空格(在python shell窗口的一个选项卡中),数字取决于缩进宽度。目前,由于tcl/tk的限制,标签被限制为四个空格。

另请参见上的indent/dendent region命令 Format menu .

完井

当请求且可用时,将为模块名、类或函数的属性或文件名提供补全。每个请求方法都显示一个带有现有名称的完成框。(有关例外情况,请参阅下面的制表符补全。)对于任何框,请通过键入和删除字符来更改正在完成的名称和框中突出显示的项目;通过点击 UpDownPageUpPageDownHomeEnd 键;以及在框内单击一次。用 EscapeEnter ,然后加倍 Tab 在盒子外按键或咔哒声。在框中双击选择并关闭。

打开框的一种方法是键入键字符并等待预定义的间隔。默认为2秒;在“设置”对话框中自定义。(要防止自动弹出窗口,请将延迟设置为大量毫秒,例如100000000。)对于导入的模块名称或类或函数属性,请键入“.”。对于根目录中的文件名,键入 os.sepos.altsep 紧跟在开场白之后。(在Windows上,可以先指定驱动器。)通过键入目录名和分隔符移动到子目录中。

在“编辑”菜单上使用“显示完成”命令立即打开一个完成框,而不是等待或关闭框。默认热键是 C-space . 如果在打开框之前键入所需名称的前缀,则会显示第一个匹配项或未遂项。结果与在显示框后输入前缀相同。在引用完成当前目录(而不是根目录)中的文件名后显示补全。

Tab 前缀后通常与Show Completions具有相同的效果。(没有前缀,它会缩进。)但是,如果前缀只有一个匹配项,则该匹配项会立即添加到编辑器文本中,而不会打开一个框。

调用“Show Completions”,或点击 Tab 打开一个没有关键字的“.”和一个前缀为“.”的字符串。

在编辑器中编辑代码时(与Shell相反),通过运行代码而不是重新启动Shell来增加可用的模块级名称。在文件顶部添加导入后,这一点尤其有用。这也增加了可能的属性完成。

完成框最初排除以''uuu'开头的名称,或者对于模块,不包括在''uuu all_uuu'中的名称。隐藏的名称可以通过在打开框之前或之后在“.”后键入“”来访问。

来电提示

当您键入 ( 在一个 可接近的 功能。函数名表达式可以包含点和下标。调用提示将一直保留,直到单击,光标移出参数区域,或 ) 已键入。当光标位于定义的参数部分时,选择菜单上的“编辑”和“显示调用提示”,或输入其快捷方式以显示调用提示。

调用提示由函数的签名和docstring组成,直到后者的第一个空行或第五个非空行。(某些内置函数缺少可访问的签名。)签名中的“/”或“*”表示前面或后面的参数仅通过位置或名称(关键字)传递。细节可能会有变化。

在Shell中,可访问的函数取决于自上次重新启动以来导入到用户进程中的模块,包括Idle本身导入的模块,以及运行了哪些定义。

例如,重新启动shell并输入 itertools.count( . 出现一个调用提示是因为Idle将itertools导入用户进程以供自己使用。(这可能会改变。)回车 turtle.write( 什么也没出现。闲人本身并不进口乌龟。菜单项和快捷方式也不起作用。进入 import turtle . 此后, turtle.write( 将显示呼叫提示。

在编辑器中,导入语句只有在运行文件后才会生效。可能需要在编写导入语句、添加函数定义后或打开现有文件后运行文件。

代码上下文

在包含Python代码的编辑器窗口中,可以切换代码上下文,以便在窗口顶部显示或隐藏窗格。显示时,此窗格冻结块代码的开始行,例如以 classdefif 关键字,否则将滚动到视图之外。窗格的大小将根据需要展开和收缩,以显示所有当前级别的上下文,最多可显示在配置空闲对话框中定义的最大行数(默认值为15)。如果没有当前上下文行,并且该功能已打开,则将显示一行空白。单击上下文窗格中的一行将把该行移动到编辑器的顶部。

上下文窗格的文本和背景色可以在配置空闲对话框的突出显示选项卡下配置。

python shell窗口

使用idle的shell,可以输入、编辑和调用完整的语句。大多数控制台和终端一次只能使用一条物理线路。

当一个人将代码粘贴到shell中时,只有点击一次,它才会被编译和执行。 Return . 可以先编辑粘贴的代码。如果一个将多个语句粘贴到shell中,结果将是 SyntaxError 当编译多个语句时,就像它们是一个语句一样。

前面小节中描述的编辑功能在交互输入代码时起作用。idle的shell窗口还响应以下键。

  • C-c 中断执行命令

  • C-d 发送文件尾;如果在 >>> 促使

  • Alt-/ (展开字)也有助于减少键入

    命令历史

    • Alt-p 检索与您键入的内容匹配的上一个命令。谈MaOOS的使用 C-p .

    • Alt-n 检索下一个。谈MaOOS的使用 C-n .

    • Return 在上一个命令中检索该命令时

文本颜色

IDLE默认为白色文本为黑色,但为具有特殊含义的文本着色。对于shell,这些是shell输出、shell错误、用户输出和用户错误。对于python代码,在shell提示或编辑器中,这些是关键字、内置类和函数名,名称如下 classdef ,字符串和注释。对于任何文本窗口,这些都是光标(如果存在)、找到的文本(如果可能)和选定的文本。

文本着色是在背景中完成的,因此未着色的文本偶尔可见。要更改颜色方案,请使用配置空闲对话框突出显示选项卡。在编辑器中标记调试器断点行,在弹出窗口和对话框中标记文本不是用户可配置的。

启动和代码执行

启动时, -s 选项,idle将执行环境变量引用的文件 IDLESTARTUPPYTHONSTARTUP . 空闲的首次检查 IDLESTARTUP 如果 IDLESTARTUP 存在引用的文件正在运行。如果 IDLESTARTUP 不存在,空闲检查 PYTHONSTARTUP .这些环境变量引用的文件是存储经常从空闲shell使用的函数或执行导入语句以导入公共模块的方便位置。

此外, Tk 如果启动文件存在,也会加载该文件。注意,tk文件是无条件加载的。此附加文件是 .Idle.py 在用户的主目录中查找。该文件中的语句将在tk名称空间中执行,因此该文件对于从idle的python shell导入要使用的函数不有用。

命令行用法

idle.py [-c command] [-d] [-e] [-h] [-i] [-r file] [-s] [-t title] [-] [arg] ...

-c command  run command in the shell window
-d          enable debugger and open shell window
-e          open editor window
-h          print help message with legal combinations and exit
-i          open shell window
-r file     run file in shell window
-s          run $IDLESTARTUP or $PYTHONSTARTUP first, in shell window
-t title    set title of shell window
-           run stdin in shell (- must be last option before args)

如果存在参数:

  • 如果 --cr 使用,所有参数都放置在 sys.argv[1:...]sys.argv[0] 设置为 '''-c''-r' . 没有打开编辑器窗口,即使这是“选项”对话框中的默认设置。

  • 否则,参数是打开以进行编辑的文件,并且 sys.argv 反映传递给空闲本身的参数。

启动失败

idle使用一个套接字在空闲的GUI进程和用户代码执行进程之间进行通信。每当shell启动或重新启动时,都必须建立连接。(后者由表示“重新启动”的分隔线表示)。如果用户进程未能连接到GUI进程,它将显示 Tk 带有“cannot connect”(无法连接)消息的错误框,该消息将用户指向此处。然后它就退出了。

失败的常见原因是用户编写的文件与标准库模块同名,例如 random.pytkinter.py . 当此类文件与即将运行的文件位于同一目录中时,idle无法导入stdlib文件。当前的修复方法是重命名用户文件。

虽然不像过去那么常见,但是防病毒或防火墙程序可能会停止连接。如果无法将程序设定为允许连接,则必须关闭程序才能使空闲状态工作。允许此内部连接是安全的,因为外部端口上看不到任何数据。一个类似的问题是网络配置错误,它会阻塞连接。

python安装问题偶尔会停止空闲:多个版本可能发生冲突,或者单个安装可能需要管理员访问。如果您撤消冲突,或者不能或不想以管理员身份运行,那么完全删除python并重新开始可能是最容易的。

僵尸pythonw.exe过程可能有问题。在Windows上,使用任务管理器检查是否有任务,如果有则停止。有时,由程序崩溃或键盘中断(control-C)启动的重新启动可能无法连接。关闭错误框或在Shell菜单上使用Restart Shell可能会解决临时问题。

当IDLE首次启动时,它会尝试读取 ~/.idlerc/ (~是一个人的主目录)。如果有问题,应显示错误消息。撇开随机磁盘故障不谈,这可以通过从不手动编辑文件来防止。而是使用“选项”下的“配置”对话框。一旦用户配置文件中出现错误,最好的解决方案可能是删除它并重新开始设置对话框。

如果IDLE退出时没有消息,并且它不是从控制台启动的,请尝试从控制台或终端启动它 (python -m idlelib )并查看这是否会导致错误消息。

正在运行用户代码

除了极少数例外,使用idle执行python代码的结果与使用默认方法直接在文本模式系统控制台或终端窗口中使用python执行相同代码的结果相同。但是,不同的接口和操作偶尔会影响可见的结果。例如, sys.modules 以更多条目开始,并且 threading.activeCount() 返回2而不是1。

默认情况下,idle在单独的操作系统进程中运行用户代码,而不是在运行shell和编辑器的用户界面进程中。在执行过程中,它将替换 sys.stdinsys.stdoutsys.stderr 使用从shell窗口获取输入并将输出发送到shell窗口的对象。原始值存储在 sys.__stdin__sys.__stdout__sys.__stderr__ 不会被触碰,但可能 None .

当shell有焦点时,它控制键盘和屏幕。这通常是透明的,但是直接访问键盘和屏幕的功能将不起作用。这些功能包括系统特定的功能,用于确定是否按下了某个键,如果按下了,则确定按下了哪个键。

IDLE的标准流替换不会由执行过程中创建的子进程继承,无论是直接由用户代码还是由模块(如多处理)继承。如果此类子流程使用 input 从sys.stdin或 printwrite 对于sys.stdout或sys.stderr,应在命令行窗口中启动idle。然后,二级子进程将附加到该窗口以进行输入和输出。

在执行过程中运行的空闲代码向调用堆栈添加帧,否则这些帧将不存在。空闲包装 sys.getrecursionlimitsys.setrecursionlimit 以减少附加堆栈帧的影响。

如果 sys 由用户代码重置,例如 importlib.reload(sys) ,IDLE的更改丢失,键盘输入和屏幕输出将无法正常工作。

当用户代码直接或通过调用sys.exit引发systemexit时,idle返回shell提示,而不是退出。

shell中的用户输出

当程序输出文本时,结果由相应的输出设备决定。当idle执行用户代码时, sys.stdoutsys.stderr 连接到idle外壳的显示区域。它的一些特性继承自底层的tk文本小部件。其他的是程序添加。重要的是,壳牌公司是为开发而设计的,而不是为生产运行而设计的。

例如,shell从不丢弃输出。将无限输出发送到shell的程序最终将填充内存,从而导致内存错误。相反,一些系统文本窗口只保留最后n行输出。例如,Windows控制台将用户设置为1到9999行,默认值为300。

tk文本小部件,因此是idle的shell,在unicode的BMP(基本多语言平面)子集中显示字符(代码点)。使用适当的字形显示哪些字符,使用替换框显示哪些字符取决于操作系统和安装的字体。制表符使以下文本在下一个制表位后开始。(每8个“字符”出现一次)。换行符使下列文本出现在新行上。根据操作系统和字体,其他控制字符将被忽略或显示为空格、方框或其他内容。(使用箭头键在此类输出中移动文本光标可能会显示一些令人惊讶的间距行为。):

>>> s = 'a\tb\a<\x02><\r>\bc\nd'  # Enter 22 chars.
>>> len(s)
14
>>> s  # Display repr(s)
'a\tb\x07<\x02><\r>\x08c\nd'
>>> print(s, end='')  # Display s as is.
# Result varies by OS and font.  Try it.

这个 repr 函数用于表达式值的交互式回显。它返回输入字符串的修改版本,其中控制代码、一些BMP代码点和所有非BMP代码点都替换为转义代码。如上所示,它允许识别字符串中的字符,而不管它们是如何显示的。

正常和错误输出通常与代码输入和彼此分开(在单独的行上)。它们每个都有不同的突出显示颜色。

对于syntaxerror回溯,检测到错误的正常“^”标记将替换为用错误突出显示为文本着色。当从文件运行的代码导致其他异常时,可以右键单击一个回溯行,跳到空闲编辑器中的相应行。如有必要,将打开该文件。

Shell有一种特殊的功能,可以将输出行压缩为“压缩文本”标签。对于n行的输出(默认为n=50),这是自动完成的。n可以在设置对话框的常规页面的pyshell部分更改。用鼠标右键单击输出可以压缩行数较少的输出。这可能是有用的行,足够长以减慢滚动速度。

通过双击标签,压缩输出在适当位置展开。也可以通过右键单击标签将其发送到剪贴板或单独的视图窗口。

开发tkinter应用程序

为了方便tkinter程序的开发,idle有意与标准的python不同。进入 import tkinter as tk; root = tk.Tk() 在标准的python中,没有显示任何内容。在空闲状态下输入相同的值,会出现一个tk窗口。在标准python中,还必须输入 root.update() 去看窗户。Idle在后台执行等效操作,大约每秒20次,大约每50毫秒一次。下一步输入 b = tk.Button(root, text='button'); b.pack() . 同样,标准python中的任何内容在进入 root.update() .

大多数tkinter程序运行 root.mainloop() ,通常在tk应用程序被销毁之前不会返回。如果程序运行时 python -i 或者从一个空闲的编辑器, >>> Shell提示直到 mainloop() 返回,此时没有任何可供交互的内容。

当从空闲编辑器运行tkinter程序时,可以注释掉mainloop调用。然后会立即得到shell提示,并可以与活动应用程序交互。在标准python中运行时,只需记住重新启用mainloop调用。

在没有子进程的情况下运行

默认情况下,idle通过使用内部环回接口的套接字在单独的子进程中执行用户代码。此连接在外部不可见,并且没有数据发送到Internet或从Internet接收到数据。如果防火墙软件仍然抱怨,您可以忽略它。

如果尝试建立套接字连接失败,IDLE将通知您。这种故障有时是暂时的,但如果持续存在,问题可能是防火墙阻塞了连接,或者是特定系统的配置错误。在问题解决之前,可以使用-n命令行开关空闲运行。

如果使用-n命令行开关启动idle,它将在单个进程中运行,并且不会创建运行rpc python执行服务器的子进程。如果python无法在您的平台上创建子进程或rpc socket接口,这可能很有用。然而,在这种模式下,用户代码并不与空闲本身隔离。此外,当选择运行/运行模块(F5)时,环境不会重新启动。如果您的代码已被修改,则必须重新加载受影响的模块(),并重新导入任何特定项(例如,从foo import baz),以使更改生效。出于这些原因,如果可能的话,最好使用默认的子进程运行idle。

3.4 版后已移除.

帮助和首选项

帮助来源

帮助菜单项“空闲帮助”显示库参考空闲章节的格式化HTML版本。结果,在一个只读的tkinter文本窗口中,接近于人们在Web浏览器中看到的内容。使用鼠标滚轮、滚动条或上下箭头键在文本中导航。或者单击TOC(目录)按钮,在打开的框中选择一个节标题。

帮助菜单项“Python Docs”打开了大量的帮助源,包括教程,可在 docs.python.org/x.y ,其中“x.y”是当前运行的Python版本。如果系统有文档的脱机副本(这可能是一个安装选项),则会打开该副本。

使用“配置空闲”对话框的“常规”选项卡,可以随时从“帮助”菜单中添加或删除选定的URL。

设置首选项

字体首选项、突出显示、键和常规首选项可以通过“选项”菜单上的“配置空闲”进行更改。非默认用户设置保存在 .idlerc 用户主目录中的目录。通过编辑或删除 .idlerc .

在“字体”选项卡上,请参阅文本示例,了解字体和大小对多种语言中多个字符的影响。编辑示例以添加其他个人感兴趣的字符。使用示例选择单间距字体。如果特定字符在shell或编辑器中有问题,请将它们添加到示例的顶部,然后尝试更改第一个大小,然后更改字体。

在“高光和关键点”选项卡上,选择内置或自定义颜色主题和关键点集。若要使用较新的内置颜色主题或具有较旧空闲的键集,请将其保存为新的自定义主题或键集,并且较旧空闲的用户可以访问它。

在MACOS上闲置

在“系统首选项:停靠”下,可以将“打开文档时首选选项卡”设置为“始终”。此设置与idle使用的tk/tkinter GUI框架不兼容,它破坏了一些空闲特性。

扩展

IDLE包含一个扩展设施。可以使用“首选项”对话框的“扩展”选项卡更改扩展的首选项。有关详细信息,请参阅idlelib目录中config-extensions.def的开头。当前唯一的默认扩展名是zzdummy,这也是一个用于测试的示例。