【问题标题】:Python IDLE auto expand for instantiated objectsPython IDLE 自动扩展实例化对象
【发布时间】:2017-05-13 11:49:59
【问题描述】:

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

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

import tkinter
from tkinter import ttk

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

如果我输入“tkinter.Tk”。然后按 ctrl+space,它会调出自动完成建议菜单就好了,但是如果我输入“root”。然后按 ctrl+空格,什么也没有发生。为什么是这样?

【问题讨论】:

    标签: python autocomplete python-idle


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 啊,我明白了,这是有道理的。在代码习惯性退出后,我正在关闭 shell,我想这是在刷新所有关于现有对象/模块的数据。谢谢!
    • 另请注意,关闭与root 对应的tk 窗口会破坏root 和所有后代小部件。如果还没有完成编辑,让 F5 重启关闭现有窗口并创建一个新窗口。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-01
    • 2012-07-16
    • 1970-01-01
    • 2020-05-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多