考虑以下最小工作示例:
它显示一个标签(一个非常小的窗口),其中包含一个递增的计数器。这很好地运作。然而,我在使用PyLance扩展和Visual Studio Code进行开发,IDE不知道
这似乎不仅限于
#!/usr/bin/env python3
from PySide6.QtCore import QTimer
from PySide6.QtWidgets import QLabel, QApplication
app = QApplication()
label = QLabel('Label')
x = 0
def timeout():
global x
x += 1
label.setText(str(x))
timer = QTimer()
timer.timeout.connect(timeout)
timer.start(200)
label.show()
app.exec()
它显示一个标签(一个非常小的窗口),其中包含一个递增的计数器。这很好地运作。然而,我在使用PyLance扩展和Visual Studio Code进行开发,IDE不知道
QTimer
的timeout
信号。
好的,按下F12会打开QtCore.pyi
文件,其中包含QTimer
的定义,但实际上并没有包含timeout
成员:
class QTimer(PySide6.QtCore.QObject):
def __init__(self, parent:Optional[PySide6.QtCore.QObject]=...) -> None: ...
def interval(self) -> int: ...
def isActive(self) -> bool: ...
def isSingleShot(self) -> bool: ...
def killTimer(self, arg__1:int) -> None: ...
def remainingTime(self) -> int: ...
def setInterval(self, msec:int) -> None: ...
def setSingleShot(self, singleShot:bool) -> None: ...
def setTimerType(self, atype:PySide6.QtCore.Qt.TimerType) -> None: ...
@overload
@staticmethod
def singleShot(arg__1:int, arg__2:Callable) -> None: ...
@overload
@staticmethod
def singleShot(msec:int, receiver:PySide6.QtCore.QObject, member:bytes) -> None: ...
@overload
@staticmethod
def singleShot(msec:int, timerType:PySide6.QtCore.Qt.TimerType, receiver:PySide6.QtCore.QObject, member:bytes) -> None: ...
@overload
def start(self) -> None: ...
@overload
def start(self, msec:int) -> None: ...
def stop(self) -> None: ...
def timerEvent(self, arg__1:PySide6.QtCore.QTimerEvent) -> None: ...
def timerId(self) -> int: ...
def timerType(self) -> PySide6.QtCore.Qt.TimerType: ...
这似乎不仅限于
QTimer
,也适用于 QAbstractButton
,其中不包括 clicked
, pressed
, released
和 toggled
等信号。简而言之,所有信号都似乎从对象中消失了。
这是怎么回事?除了 pip install pyside6
,我需要安装其他东西才能获得在类型包含中定义的所有信号吗?当然,这并不是一个阻碍程序运行的问题,但如果IDE知道对象的所有成员将更加方便。
如果有影响的话,我使用的是Ubuntu 20.04的默认python3:
$ python3
Python 3.8.10 (default, Nov 26 2021, 20:14:08)
[GCC 9.3.0] on linux