Python 实例化对象的 IDLE 自动扩展

Python IDLE auto expand for instantiated objects

我正在使用 tkinter 学习 GUI,并且我一直在使用 IDLE 中内置的自动完成功能,这样我就不必经常查看与某些 objects/classes 相关的方法的文档。

但是我遇到了一个问题,其中 IDLE 的自动完成功能不适用于实例化 classes/objects。例如,在 IDLE 编辑器中(不是交互式 shell):

import tkinter
from tkinter import ttk

root = tkinter.Tk()
root.title('Some title')

如果我输入 "tkinter.Tk." 然后按 ctrl+space,它会弹出自动完成建议菜单,但是如果我输入 "root." 然后按 ctrl+space,没有任何反应。为什么是这样?

要查找对象的属性,该对象必须存在。目前,IDLE 的自动完成不会为自动完成创建新的对象。假设您以交互方式键入

>>> import tkinter
>>> root = tkinter.Tk()
>>> root.

第一行确保模块tkinter存在于用户进程space中。第二行创建一个 root 对象。第三行的自动完成使用新的 root 对象。

如果您在编辑器中键入相同的 3 行,则在您按下 F5 之前不会执行任何代码。由于用户进程启动代码(在 idlelib/run.py 中)加上自上次重置以来已经 运行 的任何代码,自动完成仅限于用户进程中存在的任何对象。碰巧 tkinter 是(当前)由 run.py 导入的。所以 tkinter. 自动完成。但是,没有 root 对象。

用户的解决方案是运行您不完整的代码经常导入模块和创建实例。如果你在第二行之后按 F5 并 return 到编辑器,那么 root. 将自动完成,如 Shell.