<div dir="ltr">I just built the latest snapshot to try the fix for StandardButtons. It works, but only fixed some of my dialogs. I then realized that that's because there's another enum with the same issue: `QtWidgets.QDialog.DialogCode`. I temporarily replaced references to this with integers just so I could test the rest of the app, and everything else now seems fine. So I think this is the last PyQt6 bug affecting my app.</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, Feb 26, 2021 at 2:59 PM RoadrunnerWMC <<a href="mailto:roadrunnerwmc@gmail.com">roadrunnerwmc@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">Thanks for fixing the StandardButtons bug. I wasn't sure if the other two would be PyQt or Qt issues; I'll look into it at the Qt level, then.</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, Feb 26, 2021 at 10:10 AM Phil Thompson <<a href="mailto:phil@riverbankcomputing.com" target="_blank">phil@riverbankcomputing.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On 26/02/2021 04:13, RoadrunnerWMC wrote:<br>
> Hi again Phil,<br>
> <br>
> I just installed PyQt 6.0.2. The problems from my previous email are <br>
> fixed<br>
> now (thanks!) and my application is able to launch. I am having a few <br>
> new<br>
> issues now, though.<br>
> <br>
> Here's the main one:<br>
> <br>
>     from PyQt6 import QtCore, QtGui, QtWidgets<br>
>     app = QtWidgets.QApplication([])<br>
> <br>
>     mbox = QtWidgets.QMessageBox()<br>
>     mbox.setStandardButtons(QtWidgets.QMessageBox.StandardButtons.Yes |<br>
> <a href="http://QtWidgets.QMessageBox.StandardButtons.No" rel="noreferrer" target="_blank">QtWidgets.QMessageBox.StandardButtons.No</a>)<br>
>     ret = mbox.exec()<br>
> <br>
>     # The return value is an integer, but<br>
> QtWidgets.QMessageBox.StandardButtons<br>
>     # can't be converted or compared to integers.<br>
> <br>
>     # This prints False no matter which button you clicked:<br>
>     print(ret == QtWidgets.QMessageBox.StandardButtons.Yes)<br>
> <br>
>     # TypeError: int() argument must be a string, a bytes-like object <br>
> or a<br>
> number, not 'StandardButtons'<br>
>     int(QtWidgets.QMessageBox.StandardButtons.Yes)<br>
> <br>
>     # TypeError: unsupported operand type(s) for &: 'int' and<br>
> 'StandardButtons'<br>
>     print(ret & QtWidgets.QMessageBox.StandardButtons.Yes)<br>
> <br>
> As far as I can tell, there's no way to check the return value of<br>
> `QtWidgets.QMessageBox.exec()` without hardcoding integer values <br>
> (yuck).<br>
> One way to fix it would be to change `.exec()`'s return type to<br>
> `QtWidgets.QMessageBox.StandardButtons`, but since the integer values <br>
> of<br>
> the enum are officially publicly documented (<br>
> <a href="https://doc.qt.io/qt-6/qmessagebox.html#StandardButton-enum" rel="noreferrer" target="_blank">https://doc.qt.io/qt-6/qmessagebox.html#StandardButton-enum</a>), my guess <br>
> is<br>
> that adding support for int comparisons to the `StandardButtons` class<br>
> would be a better solution. Or maybe there already is a way to do this<br>
> comparison and I just don't see it?<br>
<br>
That will be fixed in the next snapshot.<br>
<br>
> A second issue:<br>
> <br>
>     from PyQt6 import QtCore, QtGui, QtWidgets<br>
>     app = QtWidgets.QApplication([])<br>
>     folder = QtWidgets.QFileDialog.getExistingDirectory(None, 'Select a<br>
> folder')<br>
>     print(folder)<br>
> <br>
> For whatever reason, this actually creates a *file*-selection dialog, <br>
> which<br>
> doesn't let me choose a folder. (Platform is KDE Neon (Ubuntu 20.04), <br>
> if it<br>
> helps.)<br>
<br>
I've only tested on macOS but that puts up the correct dialog so it is <br>
unlikely to be a PyQt issue.<br>
<br>
> One more issue I found on 6.0.1 after my previous email -- though<br>
> unfortunately without a way to trigger it consistently -- is that <br>
> sometimes<br>
> `QMainWindow.restoreState()` or `QMainWindow.restoreGeometry()` (not <br>
> sure<br>
> which) crashes if the pre-existing state (or geometry) was saved by <br>
> PyQt5.<br>
> <br>
> The best workaround I can think of is to append the PyQt version name<br>
> ("PyQt5"/"PyQt6") to the application name passed to the QSettings<br>
> constructor, thus preventing PyQt6 from ever trying to read PyQt5's<br>
> settings and vice versa. Luckily, my application has very few settings <br>
> and<br>
> I don't expect anyone to switch back and forth between PyQt versions, <br>
> so<br>
> this won't be a big problem. It's still not really ideal, though.<br>
> <br>
> Is this crash considered a bug? If not, is there a better way for me to<br>
> handle this situation?<br>
<br>
Again I can't see how that is a PyQt issue rather than a Qt issue.<br>
<br>
Phil<br>
</blockquote></div>
</blockquote></div>