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