python - 如何使用 VS Code 编辑器在 Python 包 PySide2.QtCore.Qt 模块上获得 Intellisense / tab-completion?
问题描述
我对 Python 还很陌生,但已经在Visual Studio Code中设置和工作(注意:这与Visual Studio 不同)。
我正在使用 PySide2 包完成 Qt for Python 的 GUI 教程。大多数符号通过 VS Code 的 Microsoft Python 扩展的 Intellisense 功能为我提供代码完成功能,但其中之一是 PySide2.QtCore.Qt 模块不是。
Intellisense 仍然给出了一些符号,但它们都是在开头和结尾带有双下划线的符号,并且一个名为mro
. 例如,PySide2.QtCore.Qt.AlignHCenter
编译和工作正常的工作符号不会出现在制表符完成/智能感知中。
如果我直接输入QtCore.Qt.AlignHCenter
,它会被接受并且工作正常。
问题
如何让 Intellisense/tab 完成以适用于 PySide2 包中的 PySide2.QtCore.Qt 模块?
更多信息
PySide2 是 Qt 的开源 Python 适配器。对于 Qt,PyQt5 有一个几乎相同的单独 Python 绑定,主要区别在于许可(请参阅PyQt5 和 PySide2 之间的区别是什么)。
Qt 模块似乎是一个虚拟模块,至少在 PySide2 中,根据这个答案,这可能是问题的一部分,尽管用 PyQt5.Qt 代替 PySide2.QtCore.Qt 似乎也不起作用(即 Intellisense 似乎两个绑定项目都损坏了)。
我在 VS Code 中安装了以下看起来相关的扩展(对于通用事物和其他语言还安装了更多):
Python 2019.9.34474
Python Extension Pack 1.6.0
(包含 Python、MagicPython、Jinja、Django、VS IntelliCode)Qt for Python 0.4.1
(PyQt5 和 PySide2 支持)
我尝试过的事情
我有工作代码,发布在下面。第27 行是在符号QtCore.Qt.AlignHCenter
下不提供任何 Intellisense 的元素。Qt
我尝试以各种方式导入 Qt 模块,包括直接从 PyQt5:
import PyQt5.Qt
(注意:根据评论,PyQt5 是与 PySide2 不同的项目,但大多数 API 是相同的,并且 Qt for Python VS Code 扩展支持 Qt 的两个绑定集)
这似乎什么也没做。
我尝试了其他方法来获取要导入的特定元素,例如:
from PySide2.QtCore import Qt
from PySide2.QtCore.Qt import *
第一行导入Qt
工作以提供 Qt 作为已知模块,所以我可以输入 justQt.xxx
而不是QtCore.Qt.xxx
,但 Intellisense 仍然以同样的方式失败:
编码:
### PyDownloader
# Simple GUI to Download a file from a URL
#
# Can test with this URL:
# - https://github.com/gitextensions/gitextensions/raw/master/.nuget/NuGet.exe
# which is an ~ 5Mb file
import sys
from PySide2 import QtWidgets, QtGui, QtCore
import urllib.request
class Downloader(QtWidgets.QDialog):
def __init__(self, parent=None):
QtWidgets.QDialog.__init__(self)
self.url = QtWidgets.QLineEdit()
self.save_location = QtWidgets.QLineEdit()
self.progress = QtWidgets.QProgressBar()
download = QtWidgets.QPushButton("Download")
self.url.setPlaceholderText("URL")
self.save_location.setPlaceholderText("File save location")
self.progress.setValue(0)
self.progress.setAlignment(QtCore.Qt.AlignHCenter)
layout = QtWidgets.QVBoxLayout()
layout.addWidget(self.url)
layout.addWidget(self.save_location)
layout.addWidget(self.progress)
layout.addWidget(download)
self.setLayout(layout)
self.setWindowTitle("PyDownloader")
self.setFocus()
download.clicked.connect(self.download)
def download(self):
url = self.url.text()
save_location = self.save_location.text()
urllib.request.urlretrieve(url, save_location, self.report)
# Assume success
self.progress.setValue(100)
def report(self, blocknum, blocksize, totalsize):
readsofar = blocknum * blocksize
if totalsize > 0:
percent = readsofar * 100 / totalsize
else:
# Just have it progress continuously as each block comes in
percent = (blocknum % 100)
self.progress.setValue(int(percent))
def main():
app = QtWidgets.QApplication(sys.argv)
dialog = Downloader()
dialog.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
解决方案
推荐阅读
- java - Spring:如何覆盖 @Import 注释中使用的类
- java - Oracle 中的文件 DB 链接问题结束
- python - 下面的程序没有输出,也没有错误
- sql - 如何使用两个属性对外键施加约束?
- c# - 返回 EF Core Database.ExecuteSqlInterpolatedAsync 的存储过程值
- c# - ASP NET Core MVC 如何通过 UserID 外键在 List Razor 模板中显示 SQL 表中的数据
- python - 如何在 django 类视图中显示问题答案?
- javascript - 如何在不使用 EVAL 的情况下处理两个数组对象
- python - 根据条件创建列表列表
- oracle - 如何创建单值序列?