2016-12-29 3 views
0

J'apprends des interfaces graphiques avec tkinter, et j'utilise la fonction de saisie semi-automatique intégrée à IDLE pour ne pas avoir à chercher constamment dans la documentation des méthodes relatives à certains objets/Des classes.Python IDLE auto expand pour les objets instanciés

Cependant, j'ai un problème dans lequel la fonctionnalité de saisie semi-automatique de IDLE ne fonctionne pas avec les classes/objets instanciés. Par exemple, dans l'éditeur IDLE (et non le shell interactif):

import tkinter 
from tkinter import ttk 

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

si je tape "tkinter.Tk." et puis appuyez sur ctrl + espace, il amène le menu suggestion de saisie semi-automatique très bien, mais si je tape "root". puis appuyez sur ctrl + espace, rien ne se passe. Pourquoi est-ce?

Répondre

0

Pour rechercher des attributs sur un objet, l'objet doit exister. Actuellement, la saisie semi-automatique d'IDLE ne crée pas de nouveaux objets pour l'auto-complétion. Supposons que vous tapez interactive

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

La première ligne fait en sorte que le module tkinter existe dans l'espace de processus utilisateur. La deuxième ligne crée un objet root. La saisie automatique pour la troisième ligne utilise le nouvel objet root.

Si vous tapez les mêmes 3 lignes dans un éditeur, aucun code n'est exécuté jusqu'à ce que vous appuyiez sur F5. L'auto-complétion est limitée à tout objet existant dans le processus utilisateur à cause du code de démarrage du processus utilisateur (dans idlelib/run.py) plus tout code déjà exécuté depuis la dernière réinitialisation. Il arrive que tkinter est (actuellement) importé par run.py. Donc, tkinter. autocomplètes. Cependant, il n'y a pas d'objet root.

La solution utilisateur consiste à exécuter fréquemment votre code incomplet pour importer des modules et créer des instances. Si vous appuyez sur F5 après la deuxième ligne et revenez à l'éditeur, alors root. se complètera automatiquement, comme dans l'environnement de ligne de commande.

+0

Ahh je vois, c'est logique. Je fermais le shell après que le code se soit arrêté par habitude, et je suppose que cela effacait toutes les données sur les objets/modules existants. Merci! – Platytude

+0

Notez également que la fermeture de la fenêtre tk correspondant à 'root' détruit' root' et tous les widgets descendants. Si vous n'avez pas fini d'éditer, laissez le F5 redémarrer fermer la fenêtre existante et en créer une nouvelle. –