PyQt6 6.10.2: .pyi stubs use Any and collections.abc without importing them.
Phil Thompson
phil at riverbankcomputing.com
Sat Oct 10 17:27:27 BST 2026
These will be fixed in v6.12.0.
Thanks,
Phil
On 10/10/2026 01:03, Dragan A. wrote:
> Hi,
>
> The type stubs shipped with PyQt6 6.10.2 reference names they don't
> import.
> In strict mode Pyright then reports every signal connect(),
> QTimer.singleShot()
> and pyqtSlot() use as partially unknown. In our project that is about
> 1,000
> errors.
>
> Environment:
> PyQt6 6.10.2, PyQt6-Qt6 6.10.2, PyQt6-sip 13.13.0
> Python 3.14.8, Windows 11
> Pyright 1.1.414
>
> Problems in PyQt6/QtCore.pyi:
>
> 1. Any is used but never imported (line 78):
> PYQT_SLOT = typing.Union[collections.abc.Callable[..., Any],
> pyqtBoundSignal]
>
> 2. collections.abc is used, but only "collections" is imported (line
> 23):
> import collections, re, typing, enum
> so collections.abc.Callable does not resolve (lines 68, 69, 78).
> The same applies to the other .pyi files that use collections.abc.
>
> 3. *types in pyqtSlot() has no annotation (line 69):
> def pyqtSlot(*types, name: typing.Optional[str] = ..., result:
> ...) ->
> ...
>
> 4. __eq__ has no return type (QDate, line 3491, and other classes):
> def __eq__(self, other: object): ...
>
> To reproduce, with only PyQt6 6.10.2 and pyright installed:
> pip install PyQt6==6.10.2 pyright
> pyright pyqt6_stub_repro.py (attached)
>
> Output:
> 2:62 error: Type of "pyqtSlot" is partially unknown
> Type of "pyqtSlot" is "(*types: Unknown, name: str | None =
> ...,
> result: str | None = ...) -> Unknown"
> 10:6 error: Untyped function decorator obscures type of function
> 17:1 error: Type of "connect" is partially unknown
> Type of "connect" is "(slot: Unknown | pyqtBoundSignal) ->
> Connection"
> 18:1 error: Type of "singleShot" is partially unknown
> 20:1 error: Type of "same_day" is unknown
> 21:7 error: Argument type is unknown
> 6 errors
>
> Adding "from typing import Any" and "import collections.abc" to the
> .pyi
> files removes almost all of them. Annotating *types (e.g. *types: Any)
> and
> adding "-> bool" to __eq__/__ne__ fixes the rest.
>
> Thanks,
More information about the PyQt
mailing list