diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 81caf5a..afb16a2 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -15,13 +15,8 @@ jobs: fail-fast: false matrix: include: - # oldest version of pyhon / mypy which works - - python-version: "3.6" - mypy-version: "0.940" - - # latest version of everything + - python-version: "3.8" - python-version: "3.10" - mypy-version: "0.971" steps: - uses: actions/checkout@v3 @@ -33,9 +28,9 @@ jobs: - name: Install dependencies run: | - python -m pip install pip==21.1.2 # last version that works for editable install + mypy - python -m pip install pyside2 pytest mypy==${{ matrix.mypy-version }} - pip install -e . + python -m pip install --upgrade pip + python -m pip install -r dev-requirements.txt + pip install -e . --config-settings editable_mode=strict # required for mypy/pyright to detect editable install pip list - name: run tests diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index c695755..304eeb7 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -77,10 +77,10 @@ Here, you take all the steps to reproduce a complete stub testing environment to 5. Make your current directory an editable installed package. - pip install -e . + pip install -e . --config-settings editable_mode=strict - Note: currently, with pip 22 and above, and mypy 0.971, the editable installation is not picked by mypy. - For the CI, I need to force pip to version 21.2 for it to work. You may need to force pip also to this version. + Note: the `editable_mode` option is required for Mypy to pick up the editable installation as of recent versions of setuptools. + See https://github.com/python/mypy/issues/13392. 6. Make sure the tests run correctly as they are: diff --git a/PySide2-stubs/QtAxContainer.pyi b/PySide2-stubs/QtAxContainer.pyi index dc87666..fe2d502 100644 --- a/PySide2-stubs/QtAxContainer.pyi +++ b/PySide2-stubs/QtAxContainer.pyi @@ -201,7 +201,7 @@ class QAxSelect(PySide2.QtWidgets.QDialog): SandboxingProcess : QAxSelect.SandboxingLevel = ... # 0x1 SandboxingLowIntegrity : QAxSelect.SandboxingLevel = ... # 0x2 - def __init__(self, parent:typing.Optional[PySide2.QtWidgets.QWidget]=..., flags:PySide2.QtCore.Qt.WindowFlags=...) -> None: ... + def __init__(self, parent:typing.Optional[PySide2.QtWidgets.QWidget]=..., flags:typing.Union[PySide2.QtCore.Qt.WindowFlags, PySide2.QtCore.Qt.WindowType]=...) -> None: ... def clsid(self) -> str: ... def sandboxingLevel(self) -> PySide2.QtAxContainer.QAxSelect.SandboxingLevel: ... @@ -215,9 +215,9 @@ class QAxWidget(PySide2.QtWidgets.QWidget, PySide2.QtAxContainer.QAxBase): @typing.overload - def __init__(self, c:str, parent:typing.Optional[PySide2.QtWidgets.QWidget]=..., f:PySide2.QtCore.Qt.WindowFlags=...) -> None: ... + def __init__(self, c:str, parent:typing.Optional[PySide2.QtWidgets.QWidget]=..., f:typing.Union[PySide2.QtCore.Qt.WindowFlags, PySide2.QtCore.Qt.WindowType]=...) -> None: ... @typing.overload - def __init__(self, parent:typing.Optional[PySide2.QtWidgets.QWidget]=..., f:PySide2.QtCore.Qt.WindowFlags=...) -> None: ... + def __init__(self, parent:typing.Optional[PySide2.QtWidgets.QWidget]=..., f:typing.Union[PySide2.QtCore.Qt.WindowFlags, PySide2.QtCore.Qt.WindowType]=...) -> None: ... def changeEvent(self, e:PySide2.QtCore.QEvent) -> None: ... def className(self) -> bytes: ... diff --git a/PySide2-stubs/QtCharts.pyi b/PySide2-stubs/QtCharts.pyi index c6d95b1..2e375ed 100644 --- a/PySide2-stubs/QtCharts.pyi +++ b/PySide2-stubs/QtCharts.pyi @@ -777,9 +777,9 @@ class QtCharts(Shiboken.Object): ChartTypePolar : QtCharts.QChart.ChartType = ... # 0x2 @typing.overload - def __init__(self, parent:typing.Optional[PySide2.QtWidgets.QGraphicsItem]=..., wFlags:PySide2.QtCore.Qt.WindowFlags=...) -> None: ... + def __init__(self, parent:typing.Optional[PySide2.QtWidgets.QGraphicsItem]=..., wFlags:typing.Union[PySide2.QtCore.Qt.WindowFlags, PySide2.QtCore.Qt.WindowType]=...) -> None: ... @typing.overload - def __init__(self, type:PySide2.QtCharts.QtCharts.QChart.ChartType, parent:PySide2.QtWidgets.QGraphicsItem, wFlags:PySide2.QtCore.Qt.WindowFlags) -> None: ... + def __init__(self, type:PySide2.QtCharts.QtCharts.QChart.ChartType, parent:PySide2.QtWidgets.QGraphicsItem, wFlags:typing.Union[PySide2.QtCore.Qt.WindowFlags, PySide2.QtCore.Qt.WindowType]) -> None: ... def addAxis(self, axis:PySide2.QtCharts.QtCharts.QAbstractAxis, alignment:PySide2.QtCore.Qt.Alignment) -> None: ... def addSeries(self, series:PySide2.QtCharts.QtCharts.QAbstractSeries) -> None: ... @@ -1405,7 +1405,7 @@ class QtCharts(Shiboken.Object): def __ixor__(self, other: typing.Union[int, PolarOrientation, PolarOrientations]) -> PolarOrientations: ... def __invert__(self) -> PolarOrientations: ... - def __init__(self, parent:typing.Optional[PySide2.QtWidgets.QGraphicsItem]=..., wFlags:PySide2.QtCore.Qt.WindowFlags=...) -> None: ... + def __init__(self, parent:typing.Optional[PySide2.QtWidgets.QGraphicsItem]=..., wFlags:typing.Union[PySide2.QtCore.Qt.WindowFlags, PySide2.QtCore.Qt.WindowType]=...) -> None: ... @typing.overload def addAxis(self, axis:PySide2.QtCharts.QtCharts.QAbstractAxis, alignment:PySide2.QtCore.Qt.Alignment) -> None: ... diff --git a/PySide2-stubs/QtCore.pyi b/PySide2-stubs/QtCore.pyi index 68092f1..c8b6d35 100644 --- a/PySide2-stubs/QtCore.pyi +++ b/PySide2-stubs/QtCore.pyi @@ -48,13 +48,14 @@ import sys # Module PySide2.QtCore import PySide2 +import enum import typing import shiboken2 as Shiboken import PySide2.QtCore -QObjectT = typing.TypeVar('QObjectT', bound='QOjbect') +QObjectT = typing.TypeVar('QObjectT', bound='QObject') class ClassInfo(object): @@ -72,15 +73,38 @@ class MetaSignal(type): def __instancecheck__(object:object) -> bool: ... -class Property(object): +_PO = typing.TypeVar("_PO", bound="PySide2.QtCore.QObject") +_PT = typing.TypeVar("_PT") - def __init__(self, type:type, fget:typing.Optional[typing.Callable]=..., fset:typing.Optional[typing.Callable]=..., freset:typing.Optional[typing.Callable]=..., fdel:typing.Optional[typing.Callable]=..., doc:str=..., notify:typing.Optional[typing.Callable]=..., designable:bool=..., scriptable:bool=..., stored:bool=..., user:bool=..., constant:bool=..., final:bool=...) -> PySide2.QtCore.Property: ... +class Property(typing.Generic[_PO, _PT]): - def deleter(self, func:typing.Callable) -> None: ... - def getter(self, func:typing.Callable) -> None: ... - def read(self, func:typing.Callable) -> None: ... - def setter(self, func:typing.Callable) -> None: ... - def write(self, func:typing.Callable) -> None: ... + def __init__(self, type:typing.Type[_PT], fget:typing.Optional[typing.Callable[[_PO], _PT]]=..., fset:typing.Optional[typing.Callable[[_PO, _PT], None]]=..., freset:typing.Optional[typing.Callable[[_PO], None]]=..., fdel:typing.Optional[typing.Callable[[_PO], None]]=..., doc:str=..., notify:typing.Optional[PySide2.QtCore.Signal]=..., designable:bool=..., scriptable:bool=..., stored:bool=..., user:bool=..., constant:bool=..., final:bool=...) -> PySide2.QtCore.Property[_PT]: ... + + fget: typing.Optional[typing.Callable[[_PO], _PT]] + fset: typing.Optional[typing.Callable[[_PO, _PT], None]] + freset: typing.Optional[typing.Callable[[_PO], None]] + fdel: typing.Optional[typing.Callable[[_PO], None]] + + def getter(self, func:typing.Callable[[_PO], _PT]) -> PySide2.QtCore.Property[_PT]: ... + def setter(self, func:typing.Callable[[_PO, _PT], None]) -> PySide2.QtCore.Property[_PT]: ... + def deleter(self, func:typing.Callable[[_PO], None]) -> PySide2.QtCore.Property[_PT]: ... + + # aliases for getter and setter + def read(self, func:typing.Callable[[_PO], _PT]) -> PySide2.QtCore.Property[_PT]: ... + def write(self, func:typing.Callable[[_PO, _PT], None]) -> PySide2.QtCore.Property[_PT]: ... + + # HACK - Property is not actually a descriptor and does not define these methods; + # it's QObject's __getattribute__ which is responsible for resolving properties, + # but there's no way for us to type hint that. attempting to access these methods directly + # at runtime will cause an error + @typing.overload + def __get__(self, instance: None, owner: typing.Optional[typing.Type[typing.Any]] = ...) -> Property[_PT]: + ... + @typing.overload + def __get__(self, instance: _PO, owner: typing.Optional[typing.Type[_PO]] = ...) -> _PT: + ... + def __set__(self, instance: _PO, value: _PT) -> None: + ... class QAbstractAnimation(PySide2.QtCore.QObject): @@ -13565,17 +13589,17 @@ class Qt(Shiboken.Object): class WindowFlags(object): def __index__(self) -> int: ... - def __init__(self, value: typing.Union[int, WindowType, WindowFlags] = ...) -> None: ... - def __or__(self, other: typing.Union[int, WindowType, WindowFlags]) -> WindowFlags: ... - def __and__(self, other: typing.Union[int, WindowType, WindowFlags]) -> WindowFlags: ... - def __xor__(self, other: typing.Union[int, WindowType, WindowFlags]) -> WindowFlags: ... - def __ror__(self, other: typing.Union[int, WindowType, WindowFlags]) -> WindowFlags: ... - def __rand__(self, other: typing.Union[int, WindowType, WindowFlags]) -> WindowFlags: ... - def __rxor__(self, other: typing.Union[int, WindowType, WindowFlags]) -> WindowFlags: ... - def __ior__(self, other: typing.Union[int, WindowType, WindowFlags]) -> WindowFlags: ... - def __iand__(self, other: typing.Union[int, WindowType, WindowFlags]) -> WindowFlags: ... - def __ixor__(self, other: typing.Union[int, WindowType, WindowFlags]) -> WindowFlags: ... - def __invert__(self) -> WindowFlags: ... + def __init__(self, value: typing.Union[int, PySide2.QtCore.Qt.WindowType, PySide2.QtCore.Qt.WindowFlags] = ...) -> None: ... + def __or__(self, other: typing.Union[int, PySide2.QtCore.Qt.WindowType, PySide2.QtCore.Qt.WindowFlags]) -> PySide2.QtCore.Qt.WindowFlags: ... + def __and__(self, other: typing.Union[int, PySide2.QtCore.Qt.WindowType, PySide2.QtCore.Qt.WindowFlags]) -> PySide2.QtCore.Qt.WindowFlags: ... + def __xor__(self, other: typing.Union[int, PySide2.QtCore.Qt.WindowType, PySide2.QtCore.Qt.WindowFlags]) -> PySide2.QtCore.Qt.WindowFlags: ... + def __ror__(self, other: typing.Union[int, PySide2.QtCore.Qt.WindowType, PySide2.QtCore.Qt.WindowFlags]) -> PySide2.QtCore.Qt.WindowFlags: ... + def __rand__(self, other: typing.Union[int, PySide2.QtCore.Qt.WindowType, PySide2.QtCore.Qt.WindowFlags]) -> PySide2.QtCore.Qt.WindowFlags: ... + def __rxor__(self, other: typing.Union[int, PySide2.QtCore.Qt.WindowType, PySide2.QtCore.Qt.WindowFlags]) -> PySide2.QtCore.Qt.WindowFlags: ... + def __ior__(self, other: typing.Union[int, PySide2.QtCore.Qt.WindowType, PySide2.QtCore.Qt.WindowFlags]) -> PySide2.QtCore.Qt.WindowFlags: ... + def __iand__(self, other: typing.Union[int, PySide2.QtCore.Qt.WindowType, PySide2.QtCore.Qt.WindowFlags]) -> PySide2.QtCore.Qt.WindowFlags: ... + def __ixor__(self, other: typing.Union[int, PySide2.QtCore.Qt.WindowType, PySide2.QtCore.Qt.WindowFlags]) -> PySide2.QtCore.Qt.WindowFlags: ... + def __invert__(self) -> PySide2.QtCore.Qt.WindowFlags: ... class WindowFrameSection(object): NoSection : Qt.WindowFrameSection = ... # 0x0 @@ -13630,57 +13654,57 @@ class Qt(Shiboken.Object): def __invert__(self) -> WindowStates: ... class WindowType(object): - WindowFullscreenButtonHint: Qt.WindowType = ... # -0x80000000 - Widget : Qt.WindowType = ... # 0x0 - Window : Qt.WindowType = ... # 0x1 - Dialog : Qt.WindowType = ... # 0x3 - Sheet : Qt.WindowType = ... # 0x5 - Drawer : Qt.WindowType = ... # 0x7 - Popup : Qt.WindowType = ... # 0x9 - Tool : Qt.WindowType = ... # 0xb - ToolTip : Qt.WindowType = ... # 0xd - SplashScreen : Qt.WindowType = ... # 0xf - Desktop : Qt.WindowType = ... # 0x11 - SubWindow : Qt.WindowType = ... # 0x12 - ForeignWindow : Qt.WindowType = ... # 0x21 - CoverWindow : Qt.WindowType = ... # 0x41 - WindowType_Mask : Qt.WindowType = ... # 0xff - MSWindowsFixedSizeDialogHint: Qt.WindowType = ... # 0x100 - MSWindowsOwnDC : Qt.WindowType = ... # 0x200 - BypassWindowManagerHint : Qt.WindowType = ... # 0x400 - X11BypassWindowManagerHint: Qt.WindowType = ... # 0x400 - FramelessWindowHint : Qt.WindowType = ... # 0x800 - WindowTitleHint : Qt.WindowType = ... # 0x1000 - WindowSystemMenuHint : Qt.WindowType = ... # 0x2000 - WindowMinimizeButtonHint : Qt.WindowType = ... # 0x4000 - WindowMaximizeButtonHint : Qt.WindowType = ... # 0x8000 - WindowMinMaxButtonsHint : Qt.WindowType = ... # 0xc000 - WindowContextHelpButtonHint: Qt.WindowType = ... # 0x10000 - WindowShadeButtonHint : Qt.WindowType = ... # 0x20000 - WindowStaysOnTopHint : Qt.WindowType = ... # 0x40000 - WindowTransparentForInput: Qt.WindowType = ... # 0x80000 - WindowOverridesSystemGestures: Qt.WindowType = ... # 0x100000 - WindowDoesNotAcceptFocus : Qt.WindowType = ... # 0x200000 - MaximizeUsingFullscreenGeometryHint: Qt.WindowType = ... # 0x400000 - CustomizeWindowHint : Qt.WindowType = ... # 0x2000000 - WindowStaysOnBottomHint : Qt.WindowType = ... # 0x4000000 - WindowCloseButtonHint : Qt.WindowType = ... # 0x8000000 - MacWindowToolBarButtonHint: Qt.WindowType = ... # 0x10000000 - BypassGraphicsProxyWidget: Qt.WindowType = ... # 0x20000000 - NoDropShadowWindowHint : Qt.WindowType = ... # 0x40000000 + WindowFullscreenButtonHint: PySide2.QtCore.Qt.WindowType = ... # -0x80000000 + Widget : PySide2.QtCore.Qt.WindowType = ... # 0x0 + Window : PySide2.QtCore.Qt.WindowType = ... # 0x1 + Dialog : PySide2.QtCore.Qt.WindowType = ... # 0x3 + Sheet : PySide2.QtCore.Qt.WindowType = ... # 0x5 + Drawer : PySide2.QtCore.Qt.WindowType = ... # 0x7 + Popup : PySide2.QtCore.Qt.WindowType = ... # 0x9 + Tool : PySide2.QtCore.Qt.WindowType = ... # 0xb + ToolTip : PySide2.QtCore.Qt.WindowType = ... # 0xd + SplashScreen : PySide2.QtCore.Qt.WindowType = ... # 0xf + Desktop : PySide2.QtCore.Qt.WindowType = ... # 0x11 + SubWindow : PySide2.QtCore.Qt.WindowType = ... # 0x12 + ForeignWindow : PySide2.QtCore.Qt.WindowType = ... # 0x21 + CoverWindow : PySide2.QtCore.Qt.WindowType = ... # 0x41 + WindowType_Mask : PySide2.QtCore.Qt.WindowType = ... # 0xff + MSWindowsFixedSizeDialogHint: PySide2.QtCore.Qt.WindowType = ... # 0x100 + MSWindowsOwnDC : PySide2.QtCore.Qt.WindowType = ... # 0x200 + BypassWindowManagerHint : PySide2.QtCore.Qt.WindowType = ... # 0x400 + X11BypassWindowManagerHint: PySide2.QtCore.Qt.WindowType = ... # 0x400 + FramelessWindowHint : PySide2.QtCore.Qt.WindowType = ... # 0x800 + WindowTitleHint : PySide2.QtCore.Qt.WindowType = ... # 0x1000 + WindowSystemMenuHint : PySide2.QtCore.Qt.WindowType = ... # 0x2000 + WindowMinimizeButtonHint : PySide2.QtCore.Qt.WindowType = ... # 0x4000 + WindowMaximizeButtonHint : PySide2.QtCore.Qt.WindowType = ... # 0x8000 + WindowMinMaxButtonsHint : PySide2.QtCore.Qt.WindowType = ... # 0xc000 + WindowContextHelpButtonHint: PySide2.QtCore.Qt.WindowType = ... # 0x10000 + WindowShadeButtonHint : PySide2.QtCore.Qt.WindowType = ... # 0x20000 + WindowStaysOnTopHint : PySide2.QtCore.Qt.WindowType = ... # 0x40000 + WindowTransparentForInput: PySide2.QtCore.Qt.WindowType = ... # 0x80000 + WindowOverridesSystemGestures: PySide2.QtCore.Qt.WindowType = ... # 0x100000 + WindowDoesNotAcceptFocus : PySide2.QtCore.Qt.WindowType = ... # 0x200000 + MaximizeUsingFullscreenGeometryHint: PySide2.QtCore.Qt.WindowType = ... # 0x400000 + CustomizeWindowHint : PySide2.QtCore.Qt.WindowType = ... # 0x2000000 + WindowStaysOnBottomHint : PySide2.QtCore.Qt.WindowType = ... # 0x4000000 + WindowCloseButtonHint : PySide2.QtCore.Qt.WindowType = ... # 0x8000000 + MacWindowToolBarButtonHint: PySide2.QtCore.Qt.WindowType = ... # 0x10000000 + BypassGraphicsProxyWidget: PySide2.QtCore.Qt.WindowType = ... # 0x20000000 + NoDropShadowWindowHint : PySide2.QtCore.Qt.WindowType = ... # 0x40000000 def __index__(self) -> int: ... - def __init__(self, value: typing.Union[int, WindowType] = ...) -> None: ... - def __or__(self, other: typing.Union[int, WindowType]) -> WindowFlags: ... - def __and__(self, other: typing.Union[int, WindowType]) -> WindowFlags: ... - def __xor__(self, other: typing.Union[int, WindowType]) -> WindowFlags: ... - def __ror__(self, other: typing.Union[int, WindowType]) -> WindowFlags: ... - def __rand__(self, other: typing.Union[int, WindowType]) -> WindowFlags: ... - def __rxor__(self, other: typing.Union[int, WindowType]) -> WindowFlags: ... - def __ior__(self, other: typing.Union[int, WindowType]) -> WindowFlags: ... - def __iand__(self, other: typing.Union[int, WindowType]) -> WindowFlags: ... - def __ixor__(self, other: typing.Union[int, WindowType]) -> WindowFlags: ... - def __invert__(self) -> WindowFlags: ... + def __init__(self, value: typing.Union[int, PySide2.QtCore.Qt.WindowType] = ...) -> None: ... + def __or__(self, other: typing.Union[int, PySide2.QtCore.Qt.WindowType]) -> PySide2.QtCore.Qt.WindowFlags: ... + def __and__(self, other: typing.Union[int, PySide2.QtCore.Qt.WindowType]) -> PySide2.QtCore.Qt.WindowFlags: ... + def __xor__(self, other: typing.Union[int, PySide2.QtCore.Qt.WindowType]) -> PySide2.QtCore.Qt.WindowFlags: ... + def __ror__(self, other: typing.Union[int, PySide2.QtCore.Qt.WindowType]) -> PySide2.QtCore.Qt.WindowFlags: ... + def __rand__(self, other: typing.Union[int, PySide2.QtCore.Qt.WindowType]) -> PySide2.QtCore.Qt.WindowFlags: ... + def __rxor__(self, other: typing.Union[int, PySide2.QtCore.Qt.WindowType]) -> PySide2.QtCore.Qt.WindowFlags: ... + def __ior__(self, other: typing.Union[int, PySide2.QtCore.Qt.WindowType]) -> PySide2.QtCore.Qt.WindowFlags: ... + def __iand__(self, other: typing.Union[int, PySide2.QtCore.Qt.WindowType]) -> PySide2.QtCore.Qt.WindowFlags: ... + def __ixor__(self, other: typing.Union[int, PySide2.QtCore.Qt.WindowType]) -> PySide2.QtCore.Qt.WindowFlags: ... + def __invert__(self) -> PySide2.QtCore.Qt.WindowFlags: ... @staticmethod def bin(s:PySide2.QtCore.QTextStream) -> PySide2.QtCore.QTextStream: ... @staticmethod @@ -13843,10 +13867,12 @@ def Slot(*some_types: typing.Type, result: typing.Type = ...) \ typing.Callable[..., RetT]]: ... +_ET = typing.TypeVar("_ET", bound="enum.Enum") +_FT = typing.TypeVar("_FT", bound="enum.Flag") -def QEnum(arg__1:object) -> object: ... +def QEnum(arg__1: typing.Type[_ET]) -> typing.Type[_ET]: ... -def QFlag(arg__1:object) -> object: ... +def QFlag(arg__1: typing.Type[_FT]) -> typing.Type[_FT]: ... def QT_TRANSLATE_NOOP(arg__1:object, arg__2:object) -> object: ... diff --git a/PySide2-stubs/QtGui.pyi b/PySide2-stubs/QtGui.pyi index d409258..d65539d 100644 --- a/PySide2-stubs/QtGui.pyi +++ b/PySide2-stubs/QtGui.pyi @@ -11985,8 +11985,8 @@ class QWindow(PySide2.QtCore.QObject, PySide2.QtGui.QSurface): def setBaseSize(self, size:PySide2.QtCore.QSize) -> None: ... def setCursor(self, arg__1:typing.Union[PySide2.QtGui.QCursor, PySide2.QtCore.Qt.CursorShape]) -> None: ... def setFilePath(self, filePath:str) -> None: ... - def setFlag(self, arg__1:PySide2.QtCore.Qt.WindowType, on:bool=...) -> None: ... - def setFlags(self, flags:PySide2.QtCore.Qt.WindowFlags) -> None: ... + def setFlag(self, arg__1:typing.Union[PySide2.QtCore.Qt.WindowFlags, PySide2.QtCore.Qt.WindowType], on:bool=...) -> None: ... + def setFlags(self, flags:typing.Union[PySide2.QtCore.Qt.WindowFlags, PySide2.QtCore.Qt.WindowType]) -> None: ... def setFormat(self, format:PySide2.QtGui.QSurfaceFormat) -> None: ... def setFramePosition(self, point:PySide2.QtCore.QPoint) -> None: ... @typing.overload diff --git a/PySide2-stubs/QtOpenGL.pyi b/PySide2-stubs/QtOpenGL.pyi index f595f1f..ad8a153 100644 --- a/PySide2-stubs/QtOpenGL.pyi +++ b/PySide2-stubs/QtOpenGL.pyi @@ -919,11 +919,11 @@ class QGLShaderProgram(PySide2.QtCore.QObject): class QGLWidget(PySide2.QtWidgets.QWidget): @typing.overload - def __init__(self, context:PySide2.QtOpenGL.QGLContext, parent:typing.Optional[PySide2.QtWidgets.QWidget]=..., shareWidget:typing.Optional[PySide2.QtOpenGL.QGLWidget]=..., f:PySide2.QtCore.Qt.WindowFlags=...) -> None: ... + def __init__(self, context:PySide2.QtOpenGL.QGLContext, parent:typing.Optional[PySide2.QtWidgets.QWidget]=..., shareWidget:typing.Optional[PySide2.QtOpenGL.QGLWidget]=..., f:typing.Union[PySide2.QtCore.Qt.WindowFlags, PySide2.QtCore.Qt.WindowType]=...) -> None: ... @typing.overload - def __init__(self, format:PySide2.QtOpenGL.QGLFormat, parent:typing.Optional[PySide2.QtWidgets.QWidget]=..., shareWidget:typing.Optional[PySide2.QtOpenGL.QGLWidget]=..., f:PySide2.QtCore.Qt.WindowFlags=...) -> None: ... + def __init__(self, format:PySide2.QtOpenGL.QGLFormat, parent:typing.Optional[PySide2.QtWidgets.QWidget]=..., shareWidget:typing.Optional[PySide2.QtOpenGL.QGLWidget]=..., f:typing.Union[PySide2.QtCore.Qt.WindowFlags, PySide2.QtCore.Qt.WindowType]=...) -> None: ... @typing.overload - def __init__(self, parent:typing.Optional[PySide2.QtWidgets.QWidget]=..., shareWidget:typing.Optional[PySide2.QtOpenGL.QGLWidget]=..., f:PySide2.QtCore.Qt.WindowFlags=...) -> None: ... + def __init__(self, parent:typing.Optional[PySide2.QtWidgets.QWidget]=..., shareWidget:typing.Optional[PySide2.QtOpenGL.QGLWidget]=..., f:typing.Union[PySide2.QtCore.Qt.WindowFlags, PySide2.QtCore.Qt.WindowType]=...) -> None: ... def autoBufferSwap(self) -> bool: ... @typing.overload diff --git a/PySide2-stubs/QtPrintSupport.pyi b/PySide2-stubs/QtPrintSupport.pyi index aa55892..402b5ba 100644 --- a/PySide2-stubs/QtPrintSupport.pyi +++ b/PySide2-stubs/QtPrintSupport.pyi @@ -260,9 +260,9 @@ class QPrintPreviewDialog(PySide2.QtWidgets.QDialog): @typing.overload - def __init__(self, parent:typing.Optional[PySide2.QtWidgets.QWidget]=..., flags:PySide2.QtCore.Qt.WindowFlags=...) -> None: ... + def __init__(self, parent:typing.Optional[PySide2.QtWidgets.QWidget]=..., flags:typing.Union[PySide2.QtCore.Qt.WindowFlags, PySide2.QtCore.Qt.WindowType]=...) -> None: ... @typing.overload - def __init__(self, printer:PySide2.QtPrintSupport.QPrinter, parent:typing.Optional[PySide2.QtWidgets.QWidget]=..., flags:PySide2.QtCore.Qt.WindowFlags=...) -> None: ... + def __init__(self, printer:PySide2.QtPrintSupport.QPrinter, parent:typing.Optional[PySide2.QtWidgets.QWidget]=..., flags:typing.Union[PySide2.QtCore.Qt.WindowFlags, PySide2.QtCore.Qt.WindowType]=...) -> None: ... def done(self, result:int) -> None: ... @typing.overload @@ -296,9 +296,9 @@ class QPrintPreviewWidget(PySide2.QtWidgets.QWidget): FitInView : QPrintPreviewWidget.ZoomMode = ... # 0x2 @typing.overload - def __init__(self, parent:typing.Optional[PySide2.QtWidgets.QWidget]=..., flags:PySide2.QtCore.Qt.WindowFlags=...) -> None: ... + def __init__(self, parent:typing.Optional[PySide2.QtWidgets.QWidget]=..., flags:typing.Union[PySide2.QtCore.Qt.WindowFlags, PySide2.QtCore.Qt.WindowType]=...) -> None: ... @typing.overload - def __init__(self, printer:PySide2.QtPrintSupport.QPrinter, parent:typing.Optional[PySide2.QtWidgets.QWidget]=..., flags:PySide2.QtCore.Qt.WindowFlags=...) -> None: ... + def __init__(self, printer:PySide2.QtPrintSupport.QPrinter, parent:typing.Optional[PySide2.QtWidgets.QWidget]=..., flags:typing.Union[PySide2.QtCore.Qt.WindowFlags, PySide2.QtCore.Qt.WindowType]=...) -> None: ... def currentPage(self) -> int: ... def fitInView(self) -> None: ... diff --git a/PySide2-stubs/QtQml.pyi b/PySide2-stubs/QtQml.pyi index b7070ad..be76b98 100644 --- a/PySide2-stubs/QtQml.pyi +++ b/PySide2-stubs/QtQml.pyi @@ -876,6 +876,6 @@ class VolatileBool(object): @staticmethod def set(a:object) -> None: ... -def qmlRegisterType(arg__1:type, arg__2:bytes, arg__3:int, arg__4:int, arg__5:bytes) -> int: ... +def qmlRegisterType(url: typing.Type[PySide2.QtCore.QObject], uri: str, version_major: int, version_minor: int, qml_name: str) -> int: ... # eof diff --git a/PySide2-stubs/QtWidgets.pyi b/PySide2-stubs/QtWidgets.pyi index 772bb12..50cb9c3 100644 --- a/PySide2-stubs/QtWidgets.pyi +++ b/PySide2-stubs/QtWidgets.pyi @@ -1851,7 +1851,7 @@ class QDialog(PySide2.QtWidgets.QWidget): Rejected : QDialog.DialogCode = ... # 0x0 Accepted : QDialog.DialogCode = ... # 0x1 - def __init__(self, parent:typing.Optional[PySide2.QtWidgets.QWidget]=..., f:PySide2.QtCore.Qt.WindowFlags=...) -> None: ... + def __init__(self, parent:typing.Optional[PySide2.QtWidgets.QWidget]=..., f:typing.Union[PySide2.QtCore.Qt.WindowFlags, PySide2.QtCore.Qt.WindowType]=...) -> None: ... def accept(self) -> None: ... def adjustPosition(self, arg__1:PySide2.QtWidgets.QWidget) -> None: ... @@ -2146,9 +2146,9 @@ class QDockWidget(PySide2.QtWidgets.QWidget): def __invert__(self) -> DockWidgetFeatures: ... @typing.overload - def __init__(self, parent:typing.Optional[PySide2.QtWidgets.QWidget]=..., flags:PySide2.QtCore.Qt.WindowFlags=...) -> None: ... + def __init__(self, parent:typing.Optional[PySide2.QtWidgets.QWidget]=..., flags:typing.Union[PySide2.QtCore.Qt.WindowFlags, PySide2.QtCore.Qt.WindowType]=...) -> None: ... @typing.overload - def __init__(self, title:str, parent:typing.Optional[PySide2.QtWidgets.QWidget]=..., flags:PySide2.QtCore.Qt.WindowFlags=...) -> None: ... + def __init__(self, title:str, parent:typing.Optional[PySide2.QtWidgets.QWidget]=..., flags:typing.Union[PySide2.QtCore.Qt.WindowFlags, PySide2.QtCore.Qt.WindowType]=...) -> None: ... def allowedAreas(self) -> PySide2.QtCore.Qt.DockWidgetAreas: ... def changeEvent(self, event:PySide2.QtCore.QEvent) -> None: ... @@ -2311,7 +2311,7 @@ class QFileDialog(PySide2.QtWidgets.QDialog): List : QFileDialog.ViewMode = ... # 0x1 @typing.overload - def __init__(self, parent:PySide2.QtWidgets.QWidget, f:PySide2.QtCore.Qt.WindowFlags) -> None: ... + def __init__(self, parent:PySide2.QtWidgets.QWidget, f:typing.Union[PySide2.QtCore.Qt.WindowFlags, PySide2.QtCore.Qt.WindowType]) -> None: ... @typing.overload def __init__(self, parent:typing.Optional[PySide2.QtWidgets.QWidget]=..., caption:str=..., directory:str=..., filter:str=...) -> None: ... @@ -2851,7 +2851,7 @@ class QFrame(PySide2.QtWidgets.QWidget): Shape_Mask : QFrame.StyleMask = ... # 0xf Shadow_Mask : QFrame.StyleMask = ... # 0xf0 - def __init__(self, parent:typing.Optional[PySide2.QtWidgets.QWidget]=..., f:PySide2.QtCore.Qt.WindowFlags=...) -> None: ... + def __init__(self, parent:typing.Optional[PySide2.QtWidgets.QWidget]=..., f:typing.Union[PySide2.QtCore.Qt.WindowFlags, PySide2.QtCore.Qt.WindowType]=...) -> None: ... def changeEvent(self, arg__1:PySide2.QtCore.QEvent) -> None: ... def drawFrame(self, arg__1:PySide2.QtGui.QPainter) -> None: ... @@ -3992,7 +3992,7 @@ class QGraphicsPolygonItem(PySide2.QtWidgets.QAbstractGraphicsShapeItem): class QGraphicsProxyWidget(PySide2.QtWidgets.QGraphicsWidget): - def __init__(self, parent:typing.Optional[PySide2.QtWidgets.QGraphicsItem]=..., wFlags:PySide2.QtCore.Qt.WindowFlags=...) -> None: ... + def __init__(self, parent:typing.Optional[PySide2.QtWidgets.QGraphicsItem]=..., wFlags:typing.Union[PySide2.QtCore.Qt.WindowFlags, PySide2.QtCore.Qt.WindowType]=...) -> None: ... def contextMenuEvent(self, event:PySide2.QtWidgets.QGraphicsSceneContextMenuEvent) -> None: ... def createProxyForChildWidget(self, child:PySide2.QtWidgets.QWidget) -> PySide2.QtWidgets.QGraphicsProxyWidget: ... @@ -4179,7 +4179,7 @@ class QGraphicsScene(PySide2.QtCore.QObject): def addRect(self, x:float, y:float, w:float, h:float, pen:PySide2.QtGui.QPen=..., brush: Union[PySide2.QtGui.QBrush, PySide2.QtGui.QColor]=...) -> PySide2.QtWidgets.QGraphicsRectItem: ... def addSimpleText(self, text:str, font:PySide2.QtGui.QFont=...) -> PySide2.QtWidgets.QGraphicsSimpleTextItem: ... def addText(self, text:str, font:PySide2.QtGui.QFont=...) -> PySide2.QtWidgets.QGraphicsTextItem: ... - def addWidget(self, widget:PySide2.QtWidgets.QWidget, wFlags:PySide2.QtCore.Qt.WindowFlags=...) -> PySide2.QtWidgets.QGraphicsProxyWidget: ... + def addWidget(self, widget:PySide2.QtWidgets.QWidget, wFlags:typing.Union[PySide2.QtCore.Qt.WindowFlags, PySide2.QtCore.Qt.WindowType]=...) -> PySide2.QtWidgets.QGraphicsProxyWidget: ... def advance(self) -> None: ... def backgroundBrush(self) -> PySide2.QtGui.QBrush: ... def bspTreeDepth(self) -> int: ... @@ -4797,7 +4797,7 @@ class QGraphicsWidget(PySide2.QtWidgets.QGraphicsObject, PySide2.QtWidgets.QGrap layoutChanged: PySide2.QtCore.Signal - def __init__(self, parent:typing.Optional[PySide2.QtWidgets.QGraphicsItem]=..., wFlags:PySide2.QtCore.Qt.WindowFlags=...) -> None: ... + def __init__(self, parent:typing.Optional[PySide2.QtWidgets.QGraphicsItem]=..., wFlags:typing.Union[PySide2.QtCore.Qt.WindowFlags, PySide2.QtCore.Qt.WindowType]=...) -> None: ... def actions(self) -> typing.List: ... def addAction(self, action:PySide2.QtWidgets.QAction) -> None: ... @@ -4865,7 +4865,7 @@ class QGraphicsWidget(PySide2.QtWidgets.QGraphicsObject, PySide2.QtWidgets.QGrap def setStyle(self, style:PySide2.QtWidgets.QStyle) -> None: ... @staticmethod def setTabOrder(first:PySide2.QtWidgets.QGraphicsWidget, second:PySide2.QtWidgets.QGraphicsWidget) -> None: ... - def setWindowFlags(self, wFlags:PySide2.QtCore.Qt.WindowFlags) -> None: ... + def setWindowFlags(self, wFlags:typing.Union[PySide2.QtCore.Qt.WindowFlags, PySide2.QtCore.Qt.WindowType]) -> None: ... @typing.overload def setWindowFrameMargins(self, left:float, top:float, right:float, bottom:float) -> None: ... @typing.overload @@ -5158,7 +5158,7 @@ class QInputDialog(PySide2.QtWidgets.QDialog): IntInput : QInputDialog.InputMode = ... # 0x1 DoubleInput : QInputDialog.InputMode = ... # 0x2 - def __init__(self, parent:typing.Optional[PySide2.QtWidgets.QWidget]=..., flags:PySide2.QtCore.Qt.WindowFlags=...) -> None: ... + def __init__(self, parent:typing.Optional[PySide2.QtWidgets.QWidget]=..., flags:typing.Union[PySide2.QtCore.Qt.WindowFlags, PySide2.QtCore.Qt.WindowType]=...) -> None: ... def cancelButtonText(self) -> str: ... def comboBoxItems(self) -> typing.List: ... @@ -5170,18 +5170,18 @@ class QInputDialog(PySide2.QtWidgets.QDialog): def doubleValue(self) -> float: ... @typing.overload @staticmethod - def getDouble(parent:PySide2.QtWidgets.QWidget, title:str, label:str, value:float, minValue:float, maxValue:float, decimals:int, flags:PySide2.QtCore.Qt.WindowFlags, step:float) -> typing.Tuple: ... + def getDouble(parent:PySide2.QtWidgets.QWidget, title:str, label:str, value:float, minValue:float, maxValue:float, decimals:int, flags:typing.Union[PySide2.QtCore.Qt.WindowFlags, PySide2.QtCore.Qt.WindowType], step:float) -> typing.Tuple: ... @typing.overload @staticmethod - def getDouble(parent:PySide2.QtWidgets.QWidget, title:str, label:str, value:float, minValue:float=..., maxValue:float=..., decimals:int=..., flags:PySide2.QtCore.Qt.WindowFlags=...) -> typing.Tuple: ... + def getDouble(parent:PySide2.QtWidgets.QWidget, title:str, label:str, value:float, minValue:float=..., maxValue:float=..., decimals:int=..., flags:typing.Union[PySide2.QtCore.Qt.WindowFlags, PySide2.QtCore.Qt.WindowType]=...) -> typing.Tuple: ... @staticmethod - def getInt(parent:PySide2.QtWidgets.QWidget, title:str, label:str, value:int, minValue:int=..., maxValue:int=..., step:int=..., flags:PySide2.QtCore.Qt.WindowFlags=...) -> typing.Tuple: ... + def getInt(parent:PySide2.QtWidgets.QWidget, title:str, label:str, value:int, minValue:int=..., maxValue:int=..., step:int=..., flags:typing.Union[PySide2.QtCore.Qt.WindowFlags, PySide2.QtCore.Qt.WindowType]=...) -> typing.Tuple: ... @staticmethod - def getItem(parent:PySide2.QtWidgets.QWidget, title:str, label:str, items:typing.Sequence, current:int, editable:bool=..., flags:PySide2.QtCore.Qt.WindowFlags=..., inputMethodHints:PySide2.QtCore.Qt.InputMethodHints=...) -> typing.Tuple: ... + def getItem(parent:PySide2.QtWidgets.QWidget, title:str, label:str, items:typing.Sequence, current:int, editable:bool=..., flags:typing.Union[PySide2.QtCore.Qt.WindowFlags, PySide2.QtCore.Qt.WindowType]=..., inputMethodHints:PySide2.QtCore.Qt.InputMethodHints=...) -> typing.Tuple: ... @staticmethod - def getMultiLineText(parent:PySide2.QtWidgets.QWidget, title:str, label:str, text:str, flags:PySide2.QtCore.Qt.WindowFlags=..., inputMethodHints:PySide2.QtCore.Qt.InputMethodHints=...) -> typing.Tuple: ... + def getMultiLineText(parent:PySide2.QtWidgets.QWidget, title:str, label:str, text:str, flags:typing.Union[PySide2.QtCore.Qt.WindowFlags, PySide2.QtCore.Qt.WindowType]=..., inputMethodHints:PySide2.QtCore.Qt.InputMethodHints=...) -> typing.Tuple: ... @staticmethod - def getText(parent:PySide2.QtWidgets.QWidget, title:str, label:str, echo:PySide2.QtWidgets.QLineEdit.EchoMode, text:str=..., flags:PySide2.QtCore.Qt.WindowFlags=..., inputMethodHints:PySide2.QtCore.Qt.InputMethodHints=...) -> typing.Tuple: ... + def getText(parent:PySide2.QtWidgets.QWidget, title:str, label:str, echo:PySide2.QtWidgets.QLineEdit.EchoMode, text:str=..., flags:typing.Union[PySide2.QtCore.Qt.WindowFlags, PySide2.QtCore.Qt.WindowType]=..., inputMethodHints:PySide2.QtCore.Qt.InputMethodHints=...) -> typing.Tuple: ... def inputMode(self) -> PySide2.QtWidgets.QInputDialog.InputMode: ... def intMaximum(self) -> int: ... def intMinimum(self) -> int: ... @@ -5372,9 +5372,9 @@ class QLabel(PySide2.QtWidgets.QFrame): @typing.overload - def __init__(self, parent:typing.Optional[PySide2.QtWidgets.QWidget]=..., f:PySide2.QtCore.Qt.WindowFlags=...) -> None: ... + def __init__(self, parent:typing.Optional[PySide2.QtWidgets.QWidget]=..., f:typing.Union[PySide2.QtCore.Qt.WindowFlags, PySide2.QtCore.Qt.WindowType]=...) -> None: ... @typing.overload - def __init__(self, text:str, parent:typing.Optional[PySide2.QtWidgets.QWidget]=..., f:PySide2.QtCore.Qt.WindowFlags=...) -> None: ... + def __init__(self, text:str, parent:typing.Optional[PySide2.QtWidgets.QWidget]=..., f:typing.Union[PySide2.QtCore.Qt.WindowFlags, PySide2.QtCore.Qt.WindowType]=...) -> None: ... def alignment(self) -> PySide2.QtCore.Qt.Alignment: ... def buddy(self) -> PySide2.QtWidgets.QWidget: ... @@ -5966,7 +5966,7 @@ class QMainWindow(PySide2.QtWidgets.QWidget): def __ixor__(self, other: typing.Union[int, DockOption, DockOptions]) -> DockOptions: ... def __invert__(self) -> DockOptions: ... - def __init__(self, parent:typing.Optional[PySide2.QtWidgets.QWidget]=..., flags:PySide2.QtCore.Qt.WindowFlags=...) -> None: ... + def __init__(self, parent:typing.Optional[PySide2.QtWidgets.QWidget]=..., flags:typing.Union[PySide2.QtCore.Qt.WindowFlags, PySide2.QtCore.Qt.WindowType]=...) -> None: ... @typing.overload def addDockWidget(self, area:PySide2.QtCore.Qt.DockWidgetArea, dockwidget:PySide2.QtWidgets.QDockWidget) -> None: ... @@ -6086,7 +6086,7 @@ class QMdiArea(PySide2.QtWidgets.QAbstractScrollArea): def activatePreviousSubWindow(self) -> None: ... def activationOrder(self) -> PySide2.QtWidgets.QMdiArea.WindowOrder: ... def activeSubWindow(self) -> PySide2.QtWidgets.QMdiSubWindow: ... - def addSubWindow(self, widget:PySide2.QtWidgets.QWidget, flags:PySide2.QtCore.Qt.WindowFlags=...) -> PySide2.QtWidgets.QMdiSubWindow: ... + def addSubWindow(self, widget:PySide2.QtWidgets.QWidget, flags:typing.Union[PySide2.QtCore.Qt.WindowFlags, PySide2.QtCore.Qt.WindowType]=...) -> PySide2.QtWidgets.QMdiSubWindow: ... def background(self) -> PySide2.QtGui.QBrush: ... def cascadeSubWindows(self) -> None: ... def childEvent(self, childEvent:PySide2.QtCore.QChildEvent) -> None: ... @@ -6170,7 +6170,7 @@ class QMdiSubWindow(PySide2.QtWidgets.QWidget): def __ixor__(self, other: typing.Union[int, SubWindowOption, SubWindowOptions]) -> SubWindowOptions: ... def __invert__(self) -> SubWindowOptions: ... - def __init__(self, parent:typing.Optional[PySide2.QtWidgets.QWidget]=..., flags:PySide2.QtCore.Qt.WindowFlags=...) -> None: ... + def __init__(self, parent:typing.Optional[PySide2.QtWidgets.QWidget]=..., flags:typing.Union[PySide2.QtCore.Qt.WindowFlags, PySide2.QtCore.Qt.WindowType]=...) -> None: ... def changeEvent(self, changeEvent:PySide2.QtCore.QEvent) -> None: ... def childEvent(self, childEvent:PySide2.QtCore.QChildEvent) -> None: ... @@ -6501,7 +6501,7 @@ class QMessageBox(PySide2.QtWidgets.QDialog): def __invert__(self) -> StandardButtons: ... @typing.overload - def __init__(self, icon:PySide2.QtWidgets.QMessageBox.Icon, title:str, text:str, buttons:PySide2.QtWidgets.QMessageBox.StandardButtons=..., parent:typing.Optional[PySide2.QtWidgets.QWidget]=..., flags:PySide2.QtCore.Qt.WindowFlags=...) -> None: ... + def __init__(self, icon:PySide2.QtWidgets.QMessageBox.Icon, title:str, text:str, buttons:PySide2.QtWidgets.QMessageBox.StandardButtons=..., parent:typing.Optional[PySide2.QtWidgets.QWidget]=..., flags:typing.Union[PySide2.QtCore.Qt.WindowFlags, PySide2.QtCore.Qt.WindowType]=...) -> None: ... @typing.overload def __init__(self, parent:typing.Optional[PySide2.QtWidgets.QWidget]=...) -> None: ... @@ -6622,7 +6622,7 @@ class QOpenGLWidget(PySide2.QtWidgets.QWidget): NoPartialUpdate : QOpenGLWidget.UpdateBehavior = ... # 0x0 PartialUpdate : QOpenGLWidget.UpdateBehavior = ... # 0x1 - def __init__(self, parent:typing.Optional[PySide2.QtWidgets.QWidget]=..., f:PySide2.QtCore.Qt.WindowFlags=...) -> None: ... + def __init__(self, parent:typing.Optional[PySide2.QtWidgets.QWidget]=..., f:typing.Union[PySide2.QtCore.Qt.WindowFlags, PySide2.QtCore.Qt.WindowType]=...) -> None: ... def context(self) -> PySide2.QtGui.QOpenGLContext: ... def defaultFramebufferObject(self) -> int: ... @@ -6928,9 +6928,9 @@ class QProgressDialog(PySide2.QtWidgets.QDialog): @typing.overload - def __init__(self, labelText:str, cancelButtonText:str, minimum:int, maximum:int, parent:typing.Optional[PySide2.QtWidgets.QWidget]=..., flags:PySide2.QtCore.Qt.WindowFlags=...) -> None: ... + def __init__(self, labelText:str, cancelButtonText:str, minimum:int, maximum:int, parent:typing.Optional[PySide2.QtWidgets.QWidget]=..., flags:typing.Union[PySide2.QtCore.Qt.WindowFlags, PySide2.QtCore.Qt.WindowType]=...) -> None: ... @typing.overload - def __init__(self, parent:typing.Optional[PySide2.QtWidgets.QWidget]=..., flags:PySide2.QtCore.Qt.WindowFlags=...) -> None: ... + def __init__(self, parent:typing.Optional[PySide2.QtWidgets.QWidget]=..., flags:typing.Union[PySide2.QtCore.Qt.WindowFlags, PySide2.QtCore.Qt.WindowType]=...) -> None: ... def autoClose(self) -> bool: ... def autoReset(self) -> bool: ... @@ -7532,11 +7532,11 @@ class QSplashScreen(PySide2.QtWidgets.QWidget): @typing.overload - def __init__(self, parent:PySide2.QtWidgets.QWidget, pixmap:PySide2.QtGui.QPixmap=..., f:PySide2.QtCore.Qt.WindowFlags=...) -> None: ... + def __init__(self, parent:PySide2.QtWidgets.QWidget, pixmap:PySide2.QtGui.QPixmap=..., f:typing.Union[PySide2.QtCore.Qt.WindowFlags, PySide2.QtCore.Qt.WindowType]=...) -> None: ... @typing.overload - def __init__(self, pixmap:PySide2.QtGui.QPixmap=..., f:PySide2.QtCore.Qt.WindowFlags=...) -> None: ... + def __init__(self, pixmap:PySide2.QtGui.QPixmap=..., f:typing.Union[PySide2.QtCore.Qt.WindowFlags, PySide2.QtCore.Qt.WindowType]=...) -> None: ... @typing.overload - def __init__(self, screen:PySide2.QtGui.QScreen, pixmap:PySide2.QtGui.QPixmap=..., f:PySide2.QtCore.Qt.WindowFlags=...) -> None: ... + def __init__(self, screen:PySide2.QtGui.QScreen, pixmap:PySide2.QtGui.QPixmap=..., f:typing.Union[PySide2.QtCore.Qt.WindowFlags, PySide2.QtCore.Qt.WindowType]=...) -> None: ... def clearMessage(self) -> None: ... def drawContents(self, painter:PySide2.QtGui.QPainter) -> None: ... @@ -10862,7 +10862,7 @@ class QToolBox(PySide2.QtWidgets.QFrame): currentChanged: PySide2.QtCore.Signal - def __init__(self, parent:typing.Optional[PySide2.QtWidgets.QWidget]=..., f:PySide2.QtCore.Qt.WindowFlags=...) -> None: ... + def __init__(self, parent:typing.Optional[PySide2.QtWidgets.QWidget]=..., f:typing.Union[PySide2.QtCore.Qt.WindowFlags, PySide2.QtCore.Qt.WindowType]=...) -> None: ... @typing.overload def addItem(self, widget:PySide2.QtWidgets.QWidget, icon:PySide2.QtGui.QIcon, text:str) -> int: ... @@ -11528,7 +11528,7 @@ class QWidget(PySide2.QtCore.QObject, PySide2.QtGui.QPaintDevice): def __ixor__(self, other: typing.Union[int, RenderFlag, RenderFlags]) -> RenderFlags: ... def __invert__(self) -> RenderFlags: ... - def __init__(self, parent:typing.Optional[PySide2.QtWidgets.QWidget]=..., f:PySide2.QtCore.Qt.WindowFlags=...) -> None: ... + def __init__(self, parent:typing.Optional[PySide2.QtWidgets.QWidget]=..., f:typing.Union[PySide2.QtCore.Qt.WindowFlags, PySide2.QtCore.Qt.WindowType]=...) -> None: ... def acceptDrops(self) -> bool: ... def accessibleDescription(self) -> str: ... @@ -11561,7 +11561,7 @@ class QWidget(PySide2.QtCore.QObject, PySide2.QtGui.QPaintDevice): def create(self, arg__1:int=..., initializeWindow:bool=..., destroyOldWindow:bool=...) -> None: ... def createWinId(self) -> None: ... @staticmethod - def createWindowContainer(window:PySide2.QtGui.QWindow, parent:typing.Optional[PySide2.QtWidgets.QWidget]=..., flags:PySide2.QtCore.Qt.WindowFlags=...) -> PySide2.QtWidgets.QWidget: ... + def createWindowContainer(window:PySide2.QtGui.QWindow, parent:typing.Optional[PySide2.QtWidgets.QWidget]=..., flags:typing.Union[PySide2.QtCore.Qt.WindowFlags, PySide2.QtCore.Qt.WindowType]=...) -> PySide2.QtWidgets.QWidget: ... def cursor(self) -> PySide2.QtGui.QCursor: ... def destroy(self, destroyWindow:bool=..., destroySubWindows:bool=...) -> None: ... def devType(self) -> int: ... @@ -11672,7 +11672,7 @@ class QWidget(PySide2.QtCore.QObject, PySide2.QtGui.QPaintDevice): def nativeParentWidget(self) -> PySide2.QtWidgets.QWidget: ... def nextInFocusChain(self) -> PySide2.QtWidgets.QWidget: ... def normalGeometry(self) -> PySide2.QtCore.QRect: ... - def overrideWindowFlags(self, type:PySide2.QtCore.Qt.WindowFlags) -> None: ... + def overrideWindowFlags(self, type:typing.Union[PySide2.QtCore.Qt.WindowFlags, PySide2.QtCore.Qt.WindowType]) -> None: ... def overrideWindowState(self, state:PySide2.QtCore.Qt.WindowStates) -> None: ... def paintEngine(self) -> PySide2.QtGui.QPaintEngine: ... def paintEvent(self, event:PySide2.QtGui.QPaintEvent) -> None: ... @@ -11776,7 +11776,7 @@ class QWidget(PySide2.QtCore.QObject, PySide2.QtGui.QPaintDevice): @typing.overload def setParent(self, parent:PySide2.QtWidgets.QWidget) -> None: ... @typing.overload - def setParent(self, parent:PySide2.QtWidgets.QWidget, f:PySide2.QtCore.Qt.WindowFlags) -> None: ... + def setParent(self, parent:PySide2.QtWidgets.QWidget, f:typing.Union[PySide2.QtCore.Qt.WindowFlags, PySide2.QtCore.Qt.WindowType]) -> None: ... def setShortcutAutoRepeat(self, id:int, enable:bool=...) -> None: ... def setShortcutEnabled(self, id:int, enable:bool=...) -> None: ... @typing.overload @@ -11800,7 +11800,7 @@ class QWidget(PySide2.QtCore.QObject, PySide2.QtGui.QPaintDevice): def setWhatsThis(self, arg__1:str) -> None: ... def setWindowFilePath(self, filePath:str) -> None: ... def setWindowFlag(self, arg__1:PySide2.QtCore.Qt.WindowType, on:bool=...) -> None: ... - def setWindowFlags(self, type:PySide2.QtCore.Qt.WindowFlags) -> None: ... + def setWindowFlags(self, type:typing.Union[PySide2.QtCore.Qt.WindowFlags, PySide2.QtCore.Qt.WindowType]) -> None: ... def setWindowIcon(self, icon:PySide2.QtGui.QIcon) -> None: ... def setWindowIconText(self, arg__1:str) -> None: ... def setWindowModality(self, windowModality:PySide2.QtCore.Qt.WindowModality) -> None: ... @@ -12023,7 +12023,7 @@ class QWizard(PySide2.QtWidgets.QDialog): AeroStyle : QWizard.WizardStyle = ... # 0x3 NStyles : QWizard.WizardStyle = ... # 0x4 - def __init__(self, parent:typing.Optional[PySide2.QtWidgets.QWidget]=..., flags:PySide2.QtCore.Qt.WindowFlags=...) -> None: ... + def __init__(self, parent:typing.Optional[PySide2.QtWidgets.QWidget]=..., flags:typing.Union[PySide2.QtCore.Qt.WindowFlags, PySide2.QtCore.Qt.WindowType]=...) -> None: ... def addPage(self, page:PySide2.QtWidgets.QWizardPage) -> int: ... def back(self) -> None: ... diff --git a/dev-requirements.txt b/dev-requirements.txt index 0205c7e..8d537ed 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -1,5 +1,4 @@ - -PySide2==5.15.2.1 -mypy==0.971 -pytest==7.1.3 -pip==21.1.2 \ No newline at end of file +PySide2 +mypy +pyright +pytest diff --git a/setup.cfg b/setup.cfg index 8cd1a45..56a0be7 100644 --- a/setup.cfg +++ b/setup.cfg @@ -23,10 +23,7 @@ package_dir = PySide2-stubs = PySide2-stubs shiboken2-stubs = shiboken2-stubs -python_requires = >=3.6 -install_requires = - mypy>=0.940 - PySide2>=5.11.0 +python_requires = >=3.8 [options.package_data] * = *.pyi @@ -38,4 +35,5 @@ exclude = [options.extras_require] dev = - pytest \ No newline at end of file + pytest + mypy>=0.940 diff --git a/shiboken2-stubs/__init__.pyi b/shiboken2-stubs/__init__.pyi index 59585f3..16bfbe5 100644 --- a/shiboken2-stubs/__init__.pyi +++ b/shiboken2-stubs/__init__.pyi @@ -1,3 +1,38 @@ +import shiboken2 as Shiboken + +import typing + +class Object: ... + + +_T = typing.TypeVar("_T", bound="Shiboken.Object") + +def isValid(arg__1: typing.Any) -> bool: + ... + +def invalidate(arg__1: Shiboken.Object) -> None: + ... + +def wrapInstance(arg__1: int, arg__2: typing.Type[_T]) -> _T: + ... + +def getCppPointer(arg__1: Shiboken.Object) -> tuple[int, ...]: + ... + +def delete(arg__1: Shiboken.Object) -> None: + ... + +def ownedByPython(arg__1: Shiboken.Object) -> bool: + ... + +def createdByPython(arg__1: Shiboken.Object) -> bool: + ... + +def dump(arg__1: typing.Any) -> str: + ... + +def getAllValidWrappers() -> list[Shiboken.Object]: + ... + -class Object: ... \ No newline at end of file diff --git a/tests/property.py b/tests/property.py new file mode 100644 index 0000000..c069508 --- /dev/null +++ b/tests/property.py @@ -0,0 +1,26 @@ +from PySide2.QtCore import Property, QObject, Signal + + +class MyObject(QObject): + def __init__(self, default_value: int = 5): + super().__init__() + self._value = default_value + + def _getter(self) -> int: + return self._value + + def _setter(self, val: int) -> None: + if self._value != val: + self._value = val + self.valueChanged.emit() + + valueChanged = Signal() + value = Property(int, _getter, _setter, notify=valueChanged) + + +obj = MyObject() +x: int = obj.value +obj.value = 10 + +assert obj.value == 10 +assert isinstance(MyObject.value, Property) diff --git a/tests/qenum.py b/tests/qenum.py new file mode 100644 index 0000000..95034b0 --- /dev/null +++ b/tests/qenum.py @@ -0,0 +1,34 @@ +import enum +import typing_extensions + +from PySide2.QtCore import QObject, QEnum, QFlag + + +class Demo(QObject): + @QEnum + class Orientation(enum.Enum): + North, East, South, West = range(4) + + @QEnum + class State(enum.IntEnum): + SUCCESS = enum.auto() + ERROR = enum.auto() + + @QFlag + class Color(enum.Flag): + RED = enum.auto() + BLUE = enum.auto() + GREEN = enum.auto() + WHITE = RED | BLUE | GREEN + + +enum_value: enum.Enum = Demo.Orientation.East +flag_value: enum.Flag = Demo.Color.WHITE +int_value: int = Demo.State.ERROR + +assert issubclass(Demo.Orientation, enum.Enum) +assert issubclass(Demo.Color, enum.Flag) +assert issubclass(Demo.State, int) +assert Demo.State.SUCCESS == 1 +assert Demo.Color.BLUE.value == 2 +assert isinstance(Demo.Color.GREEN, Demo.Color) diff --git a/tests/qmlregistertype.py b/tests/qmlregistertype.py new file mode 100644 index 0000000..b15d524 --- /dev/null +++ b/tests/qmlregistertype.py @@ -0,0 +1,8 @@ +from PySide2.QtCore import QObject +from PySide2.QtQml import qmlRegisterType + + +class MyType(QObject): + pass + +qmlRegisterType(MyType, "MyPackage", 1, 0, "MyType") diff --git a/tests/qpolyon.py b/tests/qpolyon.py index d775f35..238f428 100644 --- a/tests/qpolyon.py +++ b/tests/qpolyon.py @@ -1,3 +1,5 @@ +# pyright: reportUnusedExpression=false + from typing import List from PySide2.QtGui import QPolygon diff --git a/tests/shiboken.py b/tests/shiboken.py new file mode 100644 index 0000000..ecd5540 --- /dev/null +++ b/tests/shiboken.py @@ -0,0 +1,11 @@ +import shiboken2 +from PySide2.QtWidgets import QWidget + + +window = QWidget() +window.setObjectName("My Window") +window_ptr: int = shiboken2.getCppPointer(window)[0] +wrapped_window: QWidget = shiboken2.wrapInstance(window_ptr, QWidget) + +assert wrapped_window.objectName() == window.objectName() +assert isinstance(wrapped_window, QWidget) diff --git a/tests/test_examples_here.py b/tests/test_examples_here.py index 2bdcbd7..ea75b79 100644 --- a/tests/test_examples_here.py +++ b/tests/test_examples_here.py @@ -1,3 +1,4 @@ +import subprocess from typing import Iterator, cast import os @@ -5,6 +6,7 @@ import pytest from mypy import api +from pyright import cli from PySide2.QtWidgets import QApplication TESTS_DIR = Path(__file__).parent @@ -43,6 +45,23 @@ def test_examples_with_mypy(filepath: Path) -> None: assert not stderr assert exitcode == 0 +@pytest.mark.parametrize( + "filepath", + list(gen_file_list()), + ids=[v.relative_to(TESTS_DIR).as_posix() for v in gen_file_list()], +) +def test_examples_with_pyright(filepath: Path) -> None: + """Run pyright over example files.""" + proc = cast("subprocess.CompletedProcess[str]", cli.run(os.fspath(filepath), capture_output=True, text=True)) + if proc.stdout: + print(proc.stdout) + if proc.stderr: + print(proc.stderr) + + assert proc.stdout.startswith("0 errors, 0 warnings") + assert not proc.stderr + assert proc.returncode == 0 + @pytest.mark.parametrize( "filepath", list(gen_file_list()), ids=[v.name for v in gen_file_list()] diff --git a/tests/windowtype.py b/tests/windowtype.py new file mode 100644 index 0000000..117df5b --- /dev/null +++ b/tests/windowtype.py @@ -0,0 +1,13 @@ +# pyright: strict + +from PySide2.QtCore import Qt +from PySide2.QtWidgets import QWidget + +window = QWidget() +window.setWindowFlags(Qt.WindowType.Window) +window.setWindowFlags(Qt.WindowType.Window | Qt.WindowType.Tool) +window.setWindowFlag(Qt.WindowType.Window, True) + +assert isinstance(Qt.WindowType.Window, Qt.WindowType) +assert isinstance(Qt.WindowType.Window | Qt.WindowType.Tool, Qt.WindowFlags) +assert not issubclass(Qt.WindowType, Qt.WindowFlags)