Pixmap alignment in QPushButtons.

Raymond Osborn rayosborn at mac.com
Sun Apr 26 22:39:27 BST 2020


Thanks for the advice. I realized after writing my last message that it can’t be an issue with the MacOS per se because PyQt v5.9 still works without problem on the current MacOS. 

I must admit that I have been surprised by how muted the response to all the MacOS issues has been. Relatively little shows up on Google. I think most package developers like me have created their own work-arounds - for example, we are all adding extra repaint calls when setting the text in QLineEdit boxes. However, I have tried a number of hacks, such as tweaking stylesheets, to get these QPushButtons to look better without success.

Ray

> On Apr 26, 2020, at 3:46 PM, Patrick Stinson <patrickkidd at gmail.com> wrote:
> 
> It sounds like you have some testing to do if you want to isolate the problem. If it were me, I would not assume it is a PyQt5 problem until you’ve ruled out both the Qt version and the macOS version.
> 
> However, a simple Qt bug report with the versions you know that it occurs in would probably be sufficient. You will need a simple working code example to do that and a pyqt example is usually sufficient.
> 
> I would not assume that the Qt devs know about this problem purely based on the fact that it’s been there for over two years. Just perform a search on the Qt bug reporting system, and if you don’t find one then report a new one. If they can reproduce it, they’ll assign a level of importance (probably not super high) and that will be all you can do in light of fixing the problem yourself - or more likely - finding a workaround for your particular application.
> 
> -Patrick
> 
>> On Apr 26, 2020, at 11:16 AM, Raymond Osborn <rayosborn at mac.com <mailto:rayosborn at mac.com>> wrote:
>> 
>> I do nearly all my testing in conda environments, and as far as I can tell, the PyQt and Qt dependencies seem to require the versions to be nearly the same. I also don’t know if this is dependent on the MacOS version. The problems seem to coincide with the release of MacOS 10.13 (High Sierra) in 2017, so it might just be that the Qt developers didn’t keep up with some change in the Mac APIs after v5.10. However, the problems have now persisted for over two years through four PyQt versions, so I hope they are aware that this is still an issue.
>> 
>> Ray 
>> 
>>> On Apr 26, 2020, at 12:13 PM, Patrick Stinson <patrickkidd at gmail.com <mailto:patrickkidd at gmail.com>> wrote:
>>> 
>>> I recall posting or commenting on a Qt bug report about vertical alignment or something similar, but I can’t remember what it was.
>>> 
>>> Are you saying that this behavior occurs when changing to PyQt5-5.11 but using the same Qt version? If this is a bug and actually not expected behavior then my initial suspicion would be that it is a function of Qt and not PyQt5. 
>>> 
>>> Generally speaking, Qt is not the most stable and reliable framework out there. It’s pretty good, but I would say the philosophy tends toward the new versus the stable. I have been working with it for over 20 years and expect regression bugs whenever I update to a newer version.
>>> 
>>> 
>>>> On Apr 26, 2020, at 7:58 AM, Raymond Osborn <rayosborn at mac.com <mailto:rayosborn at mac.com>> wrote:
>>>> 
>>>> Since PyQt 5.11, the MacOS version of  PyQt5 appears to have had a number of issues, mostly to do with failing to repaint text boxes (e.g., see https://bugreports.qt.io/browse/QTBUG-68521 <https://bugreports.qt.io/browse/QTBUG-68521> and https://bugreports.qt.io/browse/QTBUG-68740 <https://bugreports.qt.io/browse/QTBUG-68740>). There were reports that this had been fixed by 5.12, but that has not been my experience. I haven’t had time to check on 5.14 yet. Everything seems to be fine on Linux, at least with 5.12. 
>>>> 
>>>> I am writing to ask if anyone has also experienced an issue with the alignment of pixmaps in QPushButtons. I have subclassed QPushButton with the following code:
>>>> 
>>>> class NXColorButton(QtWidgets.QPushButton):
>>>> 
>>>>     def __init__(self, parent=None):
>>>>         super(NXColorButton, self).__init__(parent)
>>>>         self.setFixedSize(20, 20)
>>>>         self.setIconSize(QtCore.QSize(12, 12))
>>>>         pixmap = QtGui.QPixmap(QtCore.QSize(12, 12))
>>>>         pixmap.fill(QtGui.QColor(QtCore.Qt.white))
>>>>         self.setIcon(QtGui.QIcon(pixmap))
>>>> 
>>>> In PyQt 5.9, this produced the following button on the right:
>>>> <Color Button PyQt 5.9.7.png>
>>>> 
>>>> In PyQt 5.14.2, it produces this:
>>>> <Color Button PyQt 5.14.2.png>
>>>> 
>>>> When I query the sizes, they agree with the values in the code, but although the pixel map is square, the QPushButton below it is clearly not 20x20. It’s rectangular for a start. I can make it nearly square if I increase the size to 30x30. For comparison, the QLineEdit box to the left is 21 pixels high.
>>>> 
>>>> I can write up a bug report but I wanted to find out if this is a known issue or easy to fix.
>>>> 
>>>>>>>> Ray Osborn
>>> 
>> 
> 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://www.riverbankcomputing.com/pipermail/pyqt/attachments/20200426/4769e24e/attachment.htm>


More information about the PyQt mailing list