[PyQt] pyqt4topyqt5 a helper for the conversion PyQt4 to PyQt5
Baz Walter
bazwal at ftml.net
Mon Jul 22 19:46:38 BST 2013
On 22/07/13 09:33, Vincent Vande Vyvre wrote:
> Hi,
>
> pyqt4topyqt5 is a script intended to help to the conversion PyQt4 to PyQt5.
>
> The main fixes are the changes QtGui > QtWidgets, QtWebKit >
> QtWebKitWidget, QtGui > QtPrintSupport, refactor signal-slot old style
> in new style, change the method in QFileDialog, QWheelEvent and QLayout.
>
> See the README for an exhaustive list of fixes
>
> So, this script was written for my own needs, feel free to send me yours
> observations.
Thanks for posting this. I had thought of doing something similar
myself, but didn't find the time.
I haven't really tested your script much, but I found a couple of
problems. The 'call_re' and 'slots_re' regexps only allow for
double-quoted strings, so any single-quoted signals/slots will get the
"Ambiguous syntax" message.
Also, your script needs to allow for overloads of signals with default
arguments like "clicked(bool = 0)". This is a very common source of bugs
when converting from old-style signals - there's even an example of it
in your own README!:
< self.connect(ui.right, SIGNAL("clicked()"), lambda angle=90:
self.rotate(angle))
> ui.right.clicked.connect(lambda angle=90: self.rotate(angle))
The old-style signal will pass no arguments to its handler, but the
new-style signal will pass "False" by default (even if the button is not
checkable). To avoid this issue, you must explicitly select the "no
argument" overload with an empty tuple:
ui.right.clicked[()].connect(lambda angle=90: self.rotate(angle))
I think there may be a few other signals that have similar issues
(QAction.triggered is one that immediately springs to mind). The PyQt4
class reference has details about the default overloads for new-style
signals, e.g:
http://pyqt.sourceforge.net/Docs/PyQt4/qabstractbutton.html#clicked
http://pyqt.sourceforge.net/Docs/PyQt4/qaction.html#triggered
so you could try grepping that to find the others.
--
Regards
Baz Walter
More information about the PyQt
mailing list