[PyQt] Various issues with PyQt stubs

Florian Bruhin me at the-compiler.org
Wed May 18 21:47:29 BST 2016


Hi,

I tried to start using mypy now that PyQt has stubs.

Since I can't easily install stubs currently I opted to add them to a
repo (copied out after I ran configure.py in the PyQt repo). When I
then run mypy with --check-untyped-defs and MYPYDIR set to the stubs
dir, I get various issues mypy reports about the stub files.

The first one is obvious, a QtGui import is missing from various stub
files:

    misc/stubs/PyQt5/QtPrintSupport.pyi: note: In function "metric":
    misc/stubs/PyQt5/QtPrintSupport.pyi:177: error: Name 'QtGui' is not defined
    misc/stubs/PyQt5/QtPrintSupport.pyi: note: At top level:
    misc/stubs/PyQt5/QtPrintSupport.pyi:184a version with stubs : error: Name 'QtGui' is not defined
    [...]

I fixed this for the stub modules I use, but more might be affected:
https://github.com/The-Compiler/qutebrowser/commit/f372644124793467865b9a324a3ce77f9f0ff358

The same happens for QtNetwork in QtWebKitWidgets.pyi:

	misc/stubs/PyQt5/QtWebKitWidgets.pyi: note: In function "load":
	misc/stubs/PyQt5/QtWebKitWidgets.pyi:105: error: Name 'QtNetwork' is not defined
	misc/stubs/PyQt5/QtWebKitWidgets.pyi:229: error: Name 'QtNetwork' is not defined
	misc/stubs/PyQt5/QtWebKitWidgets.pyi: note: In function "acceptNavigationRequest":
	misc/stubs/PyQt5/QtWebKitWidgets.pyi:497: error: Invalid type "QtNetwork"
	misc/stubs/PyQt5/QtWebKitWidgets.pyi: note: In function "downloadRequested":
	misc/stubs/PyQt5/QtWebKitWidgets.pyi:501: error: Invalid type "QtNetwork"
	misc/stubs/PyQt5/QtWebKitWidgets.pyi: note: In function "unsupportedContent":
	misc/stubs/PyQt5/QtWebKitWidgets.pyi:502: error: Invalid type "QtNetwork"
	misc/stubs/PyQt5/QtWebKitWidgets.pyi: note: In function "networkAccessManager":
	misc/stubs/PyQt5/QtWebKitWidgets.pyi:542: error: Invalid type "QtNetwork"
	misc/stubs/PyQt5/QtWebKitWidgets.pyi: note: In function "setNetworkAccessManager":
	misc/stubs/PyQt5/QtWebKitWidgets.pyi:543: error: Invalid type "QtNetwork"
	misc/stubs/PyQt5/QtWebKitWidgets.pyi: note: In function "load":
	misc/stubs/PyQt5/QtWebKitWidgets.pyi:619: error: Name 'QtNetwork' is not defined

With that fixed, there are still a lot of errors about incompatible
types. I've looked into the first one:

	misc/stubs/PyQt5/QtGui.pyi: note: In class "QPixmap":
	misc/stubs/PyQt5/QtGui.pyi:181: error: Return type of "devicePixelRatio" incompatible with supertype "QPaintDevice"

Looking at the Qt documentation, it seems indeed like there's
QPaintDevice::devicePixelRatio which returns an int, which is
overridden by QPixmap::devicePixelRatio returning a qreal (aka float)?

Not sure how that'd best be expressed in the stubs, but it seems like
MyPy doesn't like how it looks currently...

The others:

	misc/stubs/PyQt5/QtGui.pyi: note: In class "QBitmap":
	misc/stubs/PyQt5/QtGui.pyi:255: error: Argument 1 of "swap" incompatible with supertype "QPixmap"
	misc/stubs/PyQt5/QtGui.pyi:256: error: Signature of "transformed" incompatible with supertype "QPixmap"
	misc/stubs/PyQt5/QtGui.pyi: note: In class "QImage":
	misc/stubs/PyQt5/QtGui.pyi:2077: error: Return type of "devicePixelRatio" incompatible with supertype "QPaintDevice"
	misc/stubs/PyQt5/QtGui.pyi: note: In class "QMatrix4x4":
	misc/stubs/PyQt5/QtGui.pyi:2543: error: Overloaded function signatures 1 and 2 overlap with incompatible return types
	misc/stubs/PyQt5/QtGui.pyi: note: In class "QWindow":
	misc/stubs/PyQt5/QtGui.pyi:3933: error: Argument 1 of "setParent" incompatible with supertype "QObject"
	misc/stubs/PyQt5/QtGui.pyi: note: In class "QPaintDeviceWindow":
	misc/stubs/PyQt5/QtGui.pyi:3942: error: Definition of "devicePixelRatio" in base class "QWindow" is incompatible with definition in base class "QPaintDevice"
	misc/stubs/PyQt5/QtGui.pyi: note: In class "QPdfWriter":
	misc/stubs/PyQt5/QtGui.pyi:5309: error: Signature of "setPageSize" incompatible with supertype "QPagedPaintDevice"
	misc/stubs/PyQt5/QtGui.pyi: note: In class "QTextList":
	misc/stubs/PyQt5/QtGui.pyi:7378: error: Argument 1 of "setFormat" incompatible with supertype "QTextObject"
	misc/stubs/PyQt5/QtGui.pyi: note: In class "QTextTable":
	misc/stubs/PyQt5/QtGui.pyi:7591: error: Argument 1 of "setFormat" incompatible with supertype "QTextObject"
	misc/stubs/PyQt5/QtGui.pyi: note: In class "QTransform":
	misc/stubs/PyQt5/QtGui.pyi:7712: error: Overloaded function signatures 3 and 4 overlap with incompatible return types
	misc/stubs/PyQt5/QtWidgets.pyi: note: In class "QWidget":
	misc/stubs/PyQt5/QtWidgets.pyi:195: error: Signature of "setParent" incompatible with supertype "QObject"
	misc/stubs/PyQt5/QtWidgets.pyi: note: In class "QAbstractItemView":
	misc/stubs/PyQt5/QtWidgets.pyi:721: error: Signature of "update" incompatible with supertype "QWidget"
	misc/stubs/PyQt5/QtWidgets.pyi: note: In class "QApplication":
	misc/stubs/PyQt5/QtWidgets.pyi:1102: error: Signature of "topLevelAt" incompatible with supertype "QGuiApplication"
	misc/stubs/PyQt5/QtWidgets.pyi: note: In class "QFileSystemModel":
	misc/stubs/PyQt5/QtWidgets.pyi:3139: error: Signature of "parent" incompatible with supertype "QAbstractItemModel"
	misc/stubs/PyQt5/QtWidgets.pyi:3139: error: Signature of "parent" incompatible with supertype "QObject"
	misc/stubs/PyQt5/QtWidgets.pyi: note: In class "QGraphicsPixmapItem":
	misc/stubs/PyQt5/QtWidgets.pyi:4288: error: Signature of "paint" incompatible with supertype "QGraphicsItem"
	misc/stubs/PyQt5/QtWidgets.pyi: note: In class "QGraphicsSimpleTextItem":
	misc/stubs/PyQt5/QtWidgets.pyi:4313: error: Signature of "paint" incompatible with supertype "QGraphicsItem"
	misc/stubs/PyQt5/QtWidgets.pyi: note: In class "QGraphicsTextItem":
	misc/stubs/PyQt5/QtWidgets.pyi:4399: error: Signature of "paint" incompatible with supertype "QGraphicsItem"
	misc/stubs/PyQt5/QtWidgets.pyi: note: In class "QGraphicsProxyWidget":
	misc/stubs/PyQt5/QtWidgets.pyi:4570: error: Signature of "paint" incompatible with supertype "QGraphicsWidget"
	misc/stubs/PyQt5/QtWidgets.pyi:4570: error: Signature of "paint" incompatible with supertype "QGraphicsItem"
	misc/stubs/PyQt5/QtWidgets.pyi:4571: error: Signature of "setGeometry" incompatible with supertype "QGraphicsWidget"
	misc/stubs/PyQt5/QtWidgets.pyi: note: In class "QGraphicsView":
	misc/stubs/PyQt5/QtWidgets.pyi:5027: error: Signature of "render" incompatible with supertype "QWidget"
	misc/stubs/PyQt5/QtWidgets.pyi: note: In class "QHeaderView":
	misc/stubs/PyQt5/QtWidgets.pyi:5191: error: Argument 1 of "initStyleOption" incompatible with supertype "QFrame"
	misc/stubs/PyQt5/QtWidgets.pyi:5216: error: Signature of "scrollTo" incompatible with supertype "QAbstractItemView"
	misc/stubs/PyQt5/QtWidgets.pyi: note: In class "QListWidget":
	misc/stubs/PyQt5/QtWidgets.pyi:5901: error: Argument 1 of "closePersistentEditor" incompatible with supertype "QAbstractItemView"
	misc/stubs/PyQt5/QtWidgets.pyi:5902: error: Argument 1 of "openPersistentEditor" incompatible with supertype "QAbstractItemView"
	misc/stubs/PyQt5/QtWidgets.pyi: note: In class "QPlainTextEdit":
	misc/stubs/PyQt5/QtWidgets.pyi:6592: error: Signature of "find" incompatible with supertype "QWidget"
	misc/stubs/PyQt5/QtWidgets.pyi: note: In class "QProxyStyle":
	misc/stubs/PyQt5/QtWidgets.pyi:6732: error: Signature of "polish" incompatible with supertype "QCommonStyle"
	misc/stubs/PyQt5/QtWidgets.pyi:6732: error: Signature of "polish" incompatible with supertype "QStyle"
	misc/stubs/PyQt5/QtWidgets.pyi:6740: error: Signature of "standardPixmap" incompatible with supertype "QCommonStyle"
	misc/stubs/PyQt5/QtWidgets.pyi:6740: error: Signature of "standardPixmap" incompatible with supertype "QStyle"
	misc/stubs/PyQt5/QtWidgets.pyi:6748: error: Signature of "subControlRect" incompatible with supertype "QCommonStyle"
	misc/stubs/PyQt5/QtWidgets.pyi:6748: error: Signature of "subControlRect" incompatible with supertype "QStyle"
	misc/stubs/PyQt5/QtWidgets.pyi:6749: error: Signature of "subElementRect" incompatible with supertype "QCommonStyle"
	misc/stubs/PyQt5/QtWidgets.pyi:6749: error: Signature of "subElementRect" incompatible with supertype "QStyle"
	misc/stubs/PyQt5/QtWidgets.pyi:6750: error: Signature of "sizeFromContents" incompatible with supertype "QCommonStyle"
	misc/stubs/PyQt5/QtWidgets.pyi:6750: error: Signature of "sizeFromContents" incompatible with supertype "QStyle"
	misc/stubs/PyQt5/QtWidgets.pyi: note: In class "QRubberBand":
	misc/stubs/PyQt5/QtWidgets.pyi:6791: error: Signature of "resize" incompatible with supertype "QWidget"
	misc/stubs/PyQt5/QtWidgets.pyi: note: In class "QSplashScreen":
	misc/stubs/PyQt5/QtWidgets.pyi:7180: error: Signature of "repaint" incompatible with supertype "QWidget"
	misc/stubs/PyQt5/QtWidgets.pyi: note: In class "QStackedLayout":
	misc/stubs/PyQt5/QtWidgets.pyi:7284: error: Return type of "addWidget" incompatible with supertype "QLayout"
	misc/stubs/PyQt5/QtWidgets.pyi: note: In class "QStylePainter":
	misc/stubs/PyQt5/QtWidgets.pyi:8174: error: Signature of "begin" incompatible with supertype "QPainter"
	misc/stubs/PyQt5/QtWidgets.pyi: note: In class "QTableWidget":
	misc/stubs/PyQt5/QtWidgets.pyi:8528: error: Argument 1 of "closePersistentEditor" incompatible with supertype "QAbstractItemView"
	misc/stubs/PyQt5/QtWidgets.pyi:8529: error: Argument 1 of "openPersistentEditor" incompatible with supertype "QAbstractItemView"
	misc/stubs/PyQt5/QtWidgets.pyi: note: In class "QTextEdit":
	misc/stubs/PyQt5/QtWidgets.pyi:8783: error: Signature of "find" incompatible with supertype "QWidget"
	misc/stubs/PyQt5/QtWidgets.pyi: note: In class "QTreeWidget":
	misc/stubs/PyQt5/QtWidgets.pyi:9256: error: Signature of "closePersistentEditor" incompatible with supertype "QAbstractItemView"
	misc/stubs/PyQt5/QtWidgets.pyi:9257: error: Signature of "openPersistentEditor" incompatible with supertype "QAbstractItemView"
	misc/stubs/PyQt5/QtCore.pyi: note: In class "QAbstractTableModel":
	misc/stubs/PyQt5/QtCore.pyi:1899: error: Signature of "parent" incompatible with supertype "QAbstractItemModel"
	misc/stubs/PyQt5/QtCore.pyi: note: In class "QAbstractListModel":
	misc/stubs/PyQt5/QtCore.pyi:1910: error: Signature of "parent" incompatible with supertype "QAbstractItemModel"
	misc/stubs/PyQt5/QtCore.pyi: note: In class "QIdentityProxyModel":
	misc/stubs/PyQt5/QtCore.pyi:3746: error: Signature of "parent" incompatible with supertype "QAbstractItemModel"
	misc/stubs/PyQt5/QtCore.pyi:3746: error: Signature of "parent" incompatible with supertype "QObject"
	misc/stubs/PyQt5/QtCore.pyi: note: In class "QStringListModel":
	misc/stubs/PyQt5/QtCore.pyi:6911: error: Signature of "data" incompatible with supertype "QAbstractItemModel"
	misc/stubs/PyQt5/QtCore.pyi: note: In class "QTemporaryFile":
	misc/stubs/PyQt5/QtCore.pyi:6975: error: Signature of "open" incompatible with supertype "QFile"
	misc/stubs/PyQt5/QtCore.pyi:6975: error: Signature of "open" incompatible with supertype "QIODevice"
	misc/stubs/PyQt5/QtPrintSupport.pyi: note: In class "QPrinter":
	misc/stubs/PyQt5/QtPrintSupport.pyi:264: error: Signature of "setPageMargins" incompatible with supertype "QPagedPaintDevice"
	misc/stubs/PyQt5/QtNetwork.pyi: note: In class "QHostAddress":
	misc/stubs/PyQt5/QtNetwork.pyi:415: error: Overloaded function signatures 2 and 3 overlap with incompatible return types
	misc/stubs/PyQt5/QtNetwork.pyi: note: In class "QSslSocket":
	misc/stubs/PyQt5/QtNetwork.pyi:1605: error: Signature of "connectToHost" incompatible with supertype "QAbstractSocket"
	misc/stubs/PyQt5/QtNetwork.pyi:1654: error: Overloaded function signatures 1 and 2 overlap with incompatible return types
	misc/stubs/PyQt5/QtNetwork.pyi:1662: error: Overloaded function signatures 1 and 2 overlap with incompatible return types
	misc/stubs/PyQt5/QtWebKit.pyi: note: In function "webFrame":
	misc/stubs/PyQt5/QtWebKit.pyi:111: error: Name 'QWebFrame' is not defined
	misc/stubs/PyQt5/QtWebKitWidgets.pyi: note: In class "QGraphicsWebView":
	misc/stubs/PyQt5/QtWebKitWidgets.pyi:89: error: Signature of "sizeHint" incompatible with supertype "QGraphicsWidget"
	misc/stubs/PyQt5/QtWebKitWidgets.pyi:89: error: Signature of "sizeHint" incompatible with supertype "QGraphicsLayoutItem"
	misc/stubs/PyQt5/QtWebKitWidgets.pyi:94: error: Signature of "setGeometry" incompatible with supertype "QGraphicsWidget"

Florian

-- 
http://www.the-compiler.org | me at the-compiler.org (Mail/XMPP)
   GPG: 916E B0C8 FD55 A072 | http://the-compiler.org/pubkey.asc
         I love long mails! | http://email.is-not-s.ms/
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <https://www.riverbankcomputing.com/pipermail/pyqt/attachments/20160518/b9573271/attachment.sig>


More information about the PyQt mailing list