Possible bug where keyword arguments don't work in PySide2 when they do in PyQt5



  • I made a resizable image class, and I'm using transformMode=QtCore.Qt.SmoothTransformation when scaling. It works fine in PyQt5, but it is ignored in PySide2. Instead you can only pass it in as a regular argument, which means you've got to specifically set everything before it too, such as aspectRatioMode, and that's not quite as pythonic.
    I even tried using **{QtCore.Qt.TransformationMode: QtCore.Qt.SmoothTransformation}, as PySide2 says it internally uses that, but it was also ignored.

    Here is what it is supposed to look like (PyQt5):

    PyQt5

    Here is what it looks like under PySide2:

    PySide2

    Btw, if anyone wants a quick try, the particular line is here, to run just clone the repo and run load_gui.py.


  • Qt Champions 2018

    Hi @PeterH92 ,

    I checked your Code.
    I think that aspectMode arguments are probably missing at Qt for Python(PySide2).

    See Document as below
    https://doc-snapshots.qt.io/qtforpython/PySide2/QtGui/QPixmap.html#PySide2.QtGui.PySide2.QtGui.QPixmap.scaled



  • Thanks for the link, looks like PyQt's transformMode is just named mode in PySide2.

    I think this is the first difference I've actually seen, at least in my opinion though, PyQt's version is what it should be.


  • Qt Champions 2018

    @PeterH92,

    PyQt's version is what it should be.

    I'm not really familiar with PyQt5. Therefore, I don't know why it hasn't happened.
    Because I can't generate the same environment.

    Can you try the following?
    Please add aspectMode = QtCore.Qt.IgnoreAspectRatio as 3rd argument.

    -31: scaled_pixmap = self._pixmapOriginal.scaled(self._pixmapWidth * size_mult, self._pixmapHeight * size_mult, transformMode=QtCore.Qt.SmoothTransformation)
    
    +31: scaled_pixmap = self._pixmapOriginal.scaled(self._pixmapWidth * size_mult, self._pixmapHeight * size_mult, aspectMode=QtCore.Qt.IgnoreAspectRatio, transformMode=QtCore.Qt.SmoothTransformation)
    


  • That still has the same problem, just did a quick test and it seems PySide 1 has the same behaviour.

    Doesn't work: aspectMode=QtCore.Qt.IgnoreAspectRatio, transformMode=QtCore.Qt.SmoothTransformation
    Works: aspectMode=QtCore.Qt.IgnoreAspectRatio, mode=QtCore.Qt.SmoothTransformation

    It's not a huge issue, just seems a bit inconsistent, especially when it says it's a QtCore.Qt.TransformationMode parameter in tracebacks.

    (I'm lucky I noticed this reply just now haha, turns out I'd accidentally deleted the UI code yesterday, fortunately was still in my undo history)


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.