2016-12-29 10 views
0

Я изучаю GUI с tkinter, и я использую функцию автозаполнения, встроенную в IDLE, так что мне не нужно постоянно искать документацию для методов, относящихся к определенным объектам/классы.Python IDLE auto expand для созданных объектов

Однако у меня возникла проблема, когда функция автозаполнения IDLE не работает с экземплярами классов/объектов. Например, в IDLE редактора (не интерактивной оболочки): "tkinter.Tk"

import tkinter 
from tkinter import ttk 

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

если я печатаю а затем нажмите ctrl + space, он очень хорошо отображает меню предложений автозаполнения, однако, если я наберу «root». а затем нажмите ctrl + space, ничего не произойдет. Почему это?

ответ

0

Чтобы искать атрибуты объекта, объект должен существовать. В настоящее время автозаполнение IDLE не создает новые объекты для автозаполнения. Предположим, что вы интерактивно типа

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

Первая линия гарантирует, что модуль tkinter существует в процессе пользовательского пространства. Во второй строке создается объект root. Автозаполнение для третьей линии использует новый объект root.

Если вы ввели те же 3 строки в редакторе, код не будет выполнен до тех пор, пока вы не нажмете F5. Автозаполнение ограничено любыми объектами, существующими в пользовательском процессе, из-за кода запуска пользовательского процесса (в idlelib/run.py), а также любого кода, который уже был запущен со времени последнего сброса. Бывает, что tkinter (в настоящее время) импортируется run.py. Итак, tkinter. автозаполняет. Однако нет объекта root.

Пользовательское решение состоит в том, чтобы часто выполнять неполный код для импорта модулей и создания экземпляров. Если вы нажмете F5 после второй строки и вернетесь в редактор, то root. будет автозаполнен, как в командной строке.

+0

Ahh Я вижу, это имеет смысл. Я закрывал оболочку после того, как код вышел из привычки, и, я думаю, это привело к потере всех данных о существующих объектах/модулях. Благодаря! – Platytude

+0

Также обратите внимание, что закрытие окна tk, соответствующее 'root', уничтожает« root »и все дочерние виджеты. Если вы не закончили редактирование, дайте F5 перезапустить закрытое существующее окно и создайте новый. –