2017-12-20 109 views
9

Tôi đã cài đặt Tiện ích mở rộng Python cho Windows. Trong PythonWin IDE tôi có thể nhận autocomplete trên các đối tượng tự động (đặc biệt là các đối tượng được tạo ra với win32com.client.Dispatch):Tự động hoàn thành đối với các đối tượng Tự động hóa trong Mã VS và Python

PythonWin IDE with autocomplete

Làm thế nào tôi có thể nhận được autocomplete cùng trong VS Mã?

Tôi đang sử dụng Microsoft Python extension.

Tiện ích mở rộng của Windows Python có công cụ gọi là COM Makepy, mà dường như tạo ra các biểu diễn Python của các đối tượng Tự động hóa, nhưng tôi không thể tìm ra cách sử dụng nó.

Cập nhật

Rõ ràng, phần mở rộng của Microsoft Python sử dụng Jedi cho autocompletion.

Tôi đã nộp issue về dự án tiện ích mở rộng trên Github.

Lưu ý rằng nói chung tôi có Intellisense bằng Python; nó chỉ là các đối tượng Intellisense on Automation mà tôi đang thiếu.

+0

Nhìn vào những thứ khác nhau Tiện ích mở rộng của Windows Python, Mã Visual Studio. Điều này dường như không thể thực hiện được. Có lẽ khi họ bắt đầu hỗ trợ mở rộng typeshed (* .pyi) sau đó nó sẽ được dễ dàng hơn để lập bản đồ những điều này –

Trả lời

3

Tôi không nghĩ rằng ví dụ bạn hiển thị với PythonWin có thể dễ dàng sao chép được trong Mã VS. Hướng dẫn bắt đầu nhanh chóng của chính mình là win32com (được trích dẫn bên dưới), chỉ có thể với trình duyệt COM hoặc tài liệu của sản phẩm (Word trong trường hợp này). Cái thứ hai là không, vì vậy PythonWin có thể đang sử dụng trình duyệt COM để tìm các thuộc tính. Và bởi vì PythonWinwin32com đi trong cùng một gói, nó không phải là không chắc rằng PythonWin đã một trình duyệt COM được xây dựng trong.

Làm thế nào để tôi biết được phương pháp và tài sản có sẵn?

Câu hỏi hay. Thật khó! Bạn cần sử dụng tài liệu với các sản phẩm hoặc có thể là trình duyệt COM. Tuy nhiên, lưu ý rằng các trình duyệt COM thường dựa vào các đối tượng này tự đăng ký theo một số cách và nhiều đối tượng để không thực hiện việc này. Bạn chỉ dự kiến ​​sẽ biết.

Nếu bạn muốn các chức năng tương tự từ VS Code plugin một trình duyệt COM sẽ phải được thực hiện vào Jedi (IntelliSense của các plugin VS Mã).

Edit: tôi thấy this gợi ý, về cách một tính năng tự động hoàn chỉnh, có thể tìm thấy những thuộc tính ẩn, có thể được thực hiện:

Những giấy gói làm những việc khác nhau mà làm cho tĩnh phân tích khó khăn, trừ chúng tôi đặc biệt hợp với họ. Giải pháp chung cho các trường hợp như vậy là chạy đến điểm ngắt và làm việc trong trạng thái thời gian chạy trực tiếp. Trình tự động hoàn thành sau đó sẽ bao gồm danh sách đầy đủ các ký hiệu vì nó kiểm tra thời gian chạy.

Cuộc hội thoại là từ danh sách gửi thư của python IDE wingwide. Here bạn có thể thấy, rằng họ thực hiện cách tiếp cận nêu trên:

Auto-Completer Icons

+0

Tôi xin lỗi, tôi đã bỏ lỡ điều đó. Tôi đã thử ví dụ của bạn, và nó hoạt động tốt cho tôi. Bạn đã thử "app.Visible" hay bạn cũng đã thử mã trước đó ("app = win32com.client.Dispatch ...")? Bởi vì đối với tôi, mọi thứ ngoại trừ phần "app.Visible" hoạt động. –

+0

IntelliSense cho "app = win32com.client.Dispach ..." có hoạt động không? –

+0

Tôi đã cố gắng như vậy trong PyCharm và nó không thể làm IntelliSense trên 'app' hoặc. Tôi nghĩ rằng (đúng tôi nếu tôi sai) IntelliSense bạn hiển thị trong ví dụ của bạn chỉ hoạt động bởi vì bạn đã viết các tham số có thể, và IntelliSense đã nhớ. Để biết thêm thông tin, hãy xem câu trả lời của pylang. –

2

xét

Tôi đã xác nhận vấn đề của bạn trong VSCode, mặc dù nó có thể là khả năng IntelliSense hoạt động tốt. Lưu ý Ctrl + Space gọi đề xuất cho một biến được xác định trước:

enter image description here

Tuy nhiên, có không xuất hiện để được thuộc tính nào có sẵn cho win32com.client theo mặc định. Đây có thể là lý do tại sao IntelliSense không hoạt động.

thử nghiệm

installed win32com cho Python 3.6, tôi đã xác nhận đoạn mã sau vào Jupyter máy tính xách tay, IPython console và có nguồn gốc Python REPL:

import win32com.client 


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

Vấn đề này thuộc tính ẩn là not a new. Vui lòng xác nhận thử nghiệm này trong môi trường/IDE khác. Nó có thể là môi trường của bạn hoặc phiên bản cụ thể của PythonWin tải trước các biến nhất định trong không gian tên chung.

Tham khảo

+0

Tiện ích mở rộng Python cho Windows đi kèm với công cụ 'makepy', tạo ra các định nghĩa tĩnh trong' c: \ Program Files \ Python36 \ Lib \ site-packages \ win32com \ gen_py'. –

0

Tôi nghĩ vấn đề của bạn có liên quan đến việc xác định Python interpreter.

Chọn thông dịch Python thích hợp bằng cách thực hiện lệnh trong python interpreterVS Code bảng lệnh bằng cách nhấn f1 hoặc ctrl+shift+p then chốt.

Các vấn đề liên quan