2016-12-29 44 views
0

我正在用tkinter学习GUI,并且我一直使用IDLE中内置的自动完成功能,以便我不必经常查看有关某些对象/类。Python IDLE自动扩展实例化对象

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

import tkinter 
from tkinter import ttk 

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

如果我输入“tkinter.Tk”。然后按Ctrl +空格键,它会弹出自动填充建议菜单,但是如果我键入“root”。然后按Ctrl +空格键,什么都不会发生。为什么是这样?

回答

0

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

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

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

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

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

+0

啊我明白了,这是有道理的。在代码退出习惯后,我正在关闭shell,我猜这是冲刷了关于现有对象/模块的所有数据。谢谢! – Platytude

+0

另请注意,关闭对应于'root'的tk窗口会破坏'root'和所有后代小部件。如果您没有完成编辑,请让F5重新启动关闭现有窗口并创建一个新窗口。 –