如何使用 pyside 正确设置 vscode?缺少建议

问题描述 投票:0回答:3

我对 pyside、qt 和 python 非常陌生。 我设法设置一个带有基本窗口和关闭应用程序的按钮的项目。 我的问题是,尽管代码可以很好地运行,但 vscode 不会显示所有可用的属性。 vscode-pyside2-problem-1.png 请注意如何建议一堆其他属性,除了信号

clicked
之外。如果我将鼠标悬停在
clicked
上,它会告诉我
clicked: Any
仅在调试期间,vscode 告诉我单击的是: vscode-pyside2-problem-2.png 当前设置:

  • 操作系统:Linux
  • 安装了
    pyside2
    的 Virtualenv
  • 使用
    ms-python.python
    ms-python.vscode-pylance
  • ui/MainWindow.ui
    文件以及相应生成的带有
    ui/MainWindow_ui.ui
    pyside2-uic
  • 文件
python visual-studio-code pyside pyside2
3个回答
6
投票

您可以通过运行手动生成存根

pyside6-genpyi all

PySide2 具有相同的工具,不仅适用于 PySide6。

我使用 PDM 来处理我的项目,我执行的最后一个项目:

pdm run pyside6-genpyi all

PyLance 检测我所有的存根:

如果您在使用

Signal
时遇到错误,那是因为 Qt/PySide 做了一些魔术并将
Signal
转换为
SignalInstance
。我的解决方案是投射
SignalInstance
以获得正确的提示。

from typing import cast
from PySide6.QtCore import Signal, SignalInstance

class ConnectionPanel(QtWidgets.QWidget):
    connected = cast(SignalInstance, Signal())
    disconnected = cast(SignalInstance, Signal())

0
投票

免责声明

这个答案是错误的。它只是解释了默认设置问题的根源,并没有提供可行的解决方案。在撰写本文时我认为这是正确的。但既然提供了正确答案,它应该是被接受的答案,而不是这个答案。我不会删除这篇文章,因为有些人会发现它在历史方面很有帮助


原帖:

Pylance 尝试使用 PySide6 库的 stub 文件(您可以使用转到定义来遍历)来提供智能感知功能。根据 Qt docs

clicked
信号应该在 QAbstractButton 类中定义,但在类型定义(存根)中我们看不到这个信号定义。如果您仔细观察,PyCharm 会从链接视频中的 QAbstractButton 类收集它,但 vs Code 中的 Pylance 在 QPushButton 中搜索它。

这是自 PySide2 以来 Pylance 中的一个已知问题,但根据 Pylance 存储库,这可能源自 Qt,因为 Python 的类型定义不正确:

输入错误或无法与 PyLance 配合使用的库。我拥有的最好的,也许是最著名的例子是 PySide2(但请参阅之前帖子中其他库的问题):正确的工作代码存在大量错误,这使得发现真正的错误变得困难。 PyQt5 中的相同代码(基本上是 PySide2 的孪生兄弟)不会引起 PyLance 的任何投诉,因此我假设问题出在 PySide2 的输入上。虽然我知道 PySide2 的输入和 PyLance 的分析结果都不一定不正确,但事实是大多数报告的错误不应该存在,因此为了简单起见,我将其称为不正确。

它可以在运行时访问的原因是;我猜它是通过 shiboken QObject 类型创建的实例。我没有任何解决方法,但这并不困扰我,因为在查找类定义中可用的信号时,我更喜欢遵循官方 Qt 文档。

编辑: 有一个已解决的错误报告,这就是 PyCharm 能够处理自动完成的原因。在 VS Code 上打开另一个应该会有所帮助。


0
投票

由于我遇到了同样的问题,我在 PySide 错误报告中发现了这个非常有用的评论:https://bugreports.qt.io/browse/PYSIDE-1603

我们的存根是通过内省自动生成的,不包括信号。目前,我们需要讨论如何支持信号。

所以,不是错误,只是缺少功能。

© www.soinside.com 2019 - 2024. All rights reserved.