<div dir="ltr">Hi,<br><br>One more stub issue, this time a general one.<br><br>At runtime, PyQt methods don't accept required arguments as keywords:<br><br>    obj.eventFilter(a0=o, a1=e)  ->  TypeError: eventFilter() takes no keyword arguments<br>    obj.event(a0=e)              ->  TypeError: event() takes no keyword arguments<br><br>But the stubs declare them as normal parameters, without "/":<br><br>    def eventFilter(self, a0: 'QObject|None', a1: 'QEvent|None') -> bool: ...<br><br>Because of that, type checkers treat the names a0/a1 as part of the API, and<br>every override that uses meaningful names is reported as incompatible<br>(pyright 1.1.414):<br><br>    class Filter(QObject):<br>        def eventFilter(self, watched: QObject | None, event: QEvent | None) -> bool: ...<br><br>    error: Method "eventFilter" overrides class "QObject" in an incompatible manner<br>      Parameter 2 name mismatch: base parameter is named "a0", override parameter is named "watched"<br><br>Users are forced to name their parameters a0, a1, ... or add ignore comments.<br>The stubs themselves already contradict this: QObject.eventFilter uses<br>(a0, a1), while some QtWidgets overrides use (watched, event), (object, event)<br>or (o, e).<br><br>The fix is to emit "/" after the arguments that can't be passed as keywords:<br><br>    def eventFilter(self, a0: 'QObject|None', a1: 'QEvent|None', /) -> bool: ...<br>    def event(self, a0: 'QEvent|None', /) -> bool: ...<br><br>This matches the runtime behavior and lets subclasses use any parameter names.<br>It applies to all generated methods, not only eventFilter.<br><br>Best regards,</div>