2017-12-20 3 views
9

Ich habe die Python-Erweiterungen für Windows installiert. Innerhalb des PythonWin IDE kann ich die automatische Vervollständigung auf Automatisierungsobjekte erhalten (genauer gesagt, mit win32com.client.Dispatch erstellen Objekte):Autocomplete für Automatisierungsobjekte in VS-Code und Python

PythonWin IDE with autocomplete

Wie kann ich die gleiche zum automatischen Vervollständigung in VS-Code erhalten?

Ich verwende die Microsoft Python extension.

Die Python Windows Extensions haben ein Werkzeug namens COM Makepy, das scheinbar Python-Darstellungen von Automatisierungsobjekten generiert, aber ich kann nicht herausfinden, wie man es benutzt.

aktualisieren

Offenbar verwendet die Microsoft Python Erweiterung Jedi für Auto-Vervollständigung.

Ich habe eine issue auf dem Erweiterungsprojekt auf Github eingereicht.

Beachten Sie, dass ich Intellisense im Allgemeinen in Python habe; Es fehlen nur die Intellisense on Automation-Objekte.

+0

Blick auf verschiedene Dinge Windows Python-Erweiterungen, Visual Studio Code. Dies scheint ab sofort nicht möglich zu sein. Wahrscheinlich, wenn sie anfangen, typeshed (* .pyi) Erweiterungen zu unterstützen, wäre es einfacher, diese Dinge zu mappen. –

Antwort

3

Ich glaube nicht, dass das Beispiel, das Sie mit PythonWin zeigen, in VS-Code leicht reproduzierbar ist. Die Quick Start Guide von win32com selbst (zitiert unten) sagt, es ist nur mit einem COM-Browser oder der Dokumentation des Produkts möglich (Word in diesem Fall). Letzteres ist unwahrscheinlich, daher verwendet PythonWin wahrscheinlich einen COM-Browser, um die Eigenschaften zu finden. Und weil PythonWin und win32com kam im selben Paket, es ist nicht so unwahrscheinlich, dass PythonWin ein COM-Browser aufgebaut hat.

Wie kann ich wissen, welche Methoden und Eigenschaften verfügbar sind?

Gute Frage. Das ist schwer! Sie müssen die Dokumentation mit den Produkten oder möglicherweise einen COM-Browser verwenden. Beachten Sie jedoch, dass die COM-Browser normalerweise darauf vertrauen, dass sich diese Objekte in bestimmten -Arten registrieren und viele Objekte dies nicht tun. Sie werden nur erwartet zu wissen.

Wenn Sie die gleiche Funktionalität aus den VS Code plugin ein COM-Browser wollten in Jedi (IntelliSense der VS-Code-Plugin) umgesetzt werden müßte.

Edit: fand ich this Vorschlag, wie eine automatische Vervollständigung, dass diese versteckten Attribute finden, getan werden könnte:

Diese Wrapper verschiedene Dinge tun, die statische Analyse erschweren, es sei denn, Wir sollten sie besonders behandeln. Die allgemeine Lösung für solche -Fälle besteht darin, bis zu einem Haltepunkt zu laufen und im Live-Laufzeitzustand zu arbeiten. Der Auto-Completer sollte dann die vollständige Liste der Symbole enthalten, da er die Laufzeit überprüft.

Die Konversation ist von einer Mailingliste der Python IDE wingwide. Here Sie sehen können, dass sie die oben genannten Ansatz umgesetzt:

Auto-Completer Icons

+0

Es tut mir leid, das habe ich verpasst. Ich habe dein Beispiel ausprobiert, und es funktioniert gut für mich. Haben Sie nur "app.Visible" ausprobiert oder haben Sie vorher auch den Code ausprobiert ("app = win32com.client.Dispatch ...")? Denn für mich funktioniert alles außer dem "app.Visible" Teil. –

+0

Funktioniert das IntelliSense für "app = win32com.client.Dispach ..."? –

+0

Ich habe das gleiche in PyCharm versucht und es konnte auch nicht das IntelliSense auf "app". Ich denke (korrigiere mich, wenn ich falsch liege), das IntelliSense, das du in deinem Beispiel zeigst, funktioniert nur, weil du bereits die möglichen Parameter geschrieben hast und IntelliSense sich erinnert hat. Für weitere Informationen siehe pylangs Antworten. –

2

Bewertung

ich Ihr Problem in VSCode bestätigt haben, obwohl es möglich IntelliSense funktioniert gut sein kann. Hinweis Strg + Leertaste Vorschläge für einen vordefinierte Variable ruft:

enter image description here

Allerdings gibt nicht öffentliche Attribute für win32com.client standardmäßig zu sein scheint. Dies könnte der Grund sein, warum IntelliSense nicht funktioniert.

-Test

Mit installed win32com für Python 3.6, ich habe den folgenden Code in Jupyter Notebook, IPython Konsole und dem nativen Python REPL bestätigt: Dieses Problem der versteckten Attribute

import win32com.client 


app = win32com.client.Dispatch("Word.Application") 
len(dir(app)) 
# 55 
[x for x in dir(app) if not x.startswith("_")] 
# [] 

ist not a new. Bitte bestätigen Sie diesen Test in einer anderen Umgebung/IDE. Es kann sein, dass Ihre Umgebung oder eine bestimmte Version von PythonWin bestimmte Variablen im globalen Namespace vorlädt.

Referenzen

+0

Python Extensions für Windows enthält das Werkzeug 'makepy', das statische Definitionen in' c: \ Programme \ Python36 \ Lib \ site-packages \ win32com \ gen_py' generiert. –

0

Ich denke, Ihr Problem zu definieren Python interpreter zusammenhängt.

richtige Python-Interpreter wählen python interpreter Befehl in VS Code Befehlspalette durch das Ausführen von f1 oder ctrl+shift+p Taste drücken.