Possible Pyqt6 Bug for MacOS

Bob Shotwell bob at shotwell.com
Thu Feb 8 19:29:31 GMT 2024


Hi, 
I am developing a Python application to assist in the creation of Python applications.  The core system has been working for about a year.  Several months ago, I started getting a C++ error messages in my python application running in PyCharm.
 
After some significant amount of troubleshooting, I have come to suspect that the error is coming from Pyqt6.  Here is what I have learned.  The following terminal commands describe my operating environment.
 
bobshotwell at Bobs-Mac-Studio ~ % sw_vers
ProductName:           macOS
ProductVersion:        14.2.1
BuildVersion:          23C71
bobshotwell at Bobs-Mac-Studio ~ % python3
Python 3.12.1 (v3.12.1:2305ca5144, Dec  7 2023, 17:23:38) [Clang 13.0.0 (clang-1300.0.29.30)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import PyQt6.QtCore
>>> print(PyQt6.QtCore.PYQT_VERSION_STR)
6.6.1
>>> 
 
I did not include info about PyCharm since I have replicated the error running python3 in the terminal.
 
Because of the complexity of my application, I used ChatGPT 4.0 to replicate the problem with a simple demo script.
 
I issued the following ChatGPT 4.0 prompt:
 
Create a python script to implement the following specification. The script uses Pyqt6 to implement the UI. The script has two widgets. Widget 1 is a combobox. Initially, the combo box is loaded from the following tuple ('alice', 'bob', 'charlie'). Widget 2 is a pushbutton. When the pushbutton is clicked, the contents of the combobox are toggled between the initial tuple and the following tuple {'drew', 'eric', 'fred').
 
ChatGPT 4.0 generated the following script:
 
import sys
from PyQt6.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QWidget, QComboBox, QPushButton
 
class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
 
        # Initial and alternate tuples for the combobox
        self.initial_tuple = ('alice', 'bob', 'charlie')
        self.alternate_tuple = ('drew', 'eric', 'fred')
 
        self.setWindowTitle("Toggle Combobox Contents")
        self.setGeometry(100, 100, 200, 100)
 
        # Create the combobox and populate it with the initial tuple
        self.comboBox = QComboBox()
        self.comboBox.addItems(self.initial_tuple)
 
        # Create the pushbutton
        self.pushButton = QPushButton("Toggle List")
        self.pushButton.clicked.connect(self.toggle_combobox_contents)
 
        # Layout configuration
        layout = QVBoxLayout()
        layout.addWidget(self.comboBox)
        layout.addWidget(self.pushButton)
 
        centralWidget = QWidget()
        centralWidget.setLayout(layout)
        self.setCentralWidget(centralWidget)
 
    def toggle_combobox_contents(self):
        # Check current items in the combobox to determine which tuple to use
        current_items = [self.comboBox.itemText(i) for i in range(self.comboBox.count())]
        if tuple(current_items) == self.initial_tuple:
            self.comboBox.clear()
            self.comboBox.addItems(self.alternate_tuple)
        else:
            self.comboBox.clear()
            self.comboBox.addItems(self.initial_tuple)
 
def main():
    app = QApplication(sys.argv)
    mainWindow = MainWindow()
    mainWindow.show()
    sys.exit(app.exec())
 
if __name__ == "__main__":
    main()
 
I copied this script into a .py file (demo.py) and ran it in the terminal:
 
bobshotwell at Bobs-Mac-Studio ~ % cd documents
bobshotwell at Bobs-Mac-Studio documents % nano demo.py
bobshotwell at Bobs-Mac-Studio documents % python3 demo.py
 
The script starts up without a problem.  However, when the pushbutton is clicked, the statement at line 37 (“self.comboBox.addItems(self.alternate_tuple)”) throws the following error:
 
*** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM objectAtIndexedSubscript:]: index 0 beyond bounds for empty array'
*** First throw call stack:
(
      0   CoreFoundation                      0x000000018806c570 __exceptionPreprocess + 176
      1   libobjc.A.dylib                     0x0000000187b5deb4 objc_exception_throw + 60
      2   CoreFoundation                      0x0000000187fe2d10 -[__NSCFString hasSuffix:] + 0
      3   libqcocoa.dylib                     0x00000001075c6044 _ZN20QCocoaSystemTrayIcon13emitActivatedEv + 274796
      4   libqcocoa.dylib                     0x00000001075c60c8 _ZN20QCocoaSystemTrayIcon13emitActivatedEv + 274928
      5   libqcocoa.dylib                     0x00000001075c4688 _ZN20QCocoaSystemTrayIcon13emitActivatedEv + 268208
      6   QtWidgets                           0x0000000105b191a8 _ZN9QListView16selectionChangedERK14QItemSelectionS2_ + 204
      7   QtCore                              0x0000000106fd348c _ZN11QMetaObject8activateEP7QObjectPKS_iPPv + 3808
      8   QtCore                              0x0000000107199e44 _ZN19QItemSelectionModel20emitSelectionChangedERK14QItemSelectionS2_ + 216
      9   QtCore                              0x0000000107199a2c _ZN19QItemSelectionModel6selectERK14QItemSelection6QFlagsINS_13SelectionFlagEE + 636
      10  QtCore                              0x000000010719970c _ZN19QItemSelectionModel6selectERK11QModelIndex6QFlagsINS_13SelectionFlagEE + 68
      11  QtCore                              0x000000010719a8cc _ZN19QItemSelectionModel15setCurrentIndexERK11QModelIndex6QFlagsINS_13SelectionFlagEE + 260
      12  QtWidgets                           0x0000000105977338 _ZNK9QComboBox5countEv + 828
      13  QtWidgets                           0x000000010597a8b4 _ZN9QComboBoxC1ER16QComboBoxPrivateP7QWidget + 2412
      14  QtCore                              0x0000000106fd3224 _ZN11QMetaObject8activateEP7QObjectPKS_iPPv + 3192
      15  QtCore                              0x0000000107182944 _ZN18QAbstractItemModel13endInsertRowsEv + 200
      16  QtGui                               0x000000010798f1a8 _ZN18QStandardItemModel11itemChangedEP13QStandardItem + 844
      17  QtWidgets                           0x000000010597de38 _ZN9QComboBox11insertItemsEiRK5QListI7QStringE + 340
      18  QtWidgets.abi3.so                   0x0000000106b529bc _ZL23meth_QComboBox_addItemsP7_objectS0_ + 136
      19  Python                              0x00000001062722ec cfunction_call + 108
      20  Python                              0x0000000106203378 _PyObject_MakeTpCall + 128
      21  Python                              0x0000000106348a40 _PyEval_EvalFrameDefault + 47144
      22  Python                              0x000000010620748c method_vectorcall + 368
      23  QtCore.abi3.so                      0x00000001054be418 _ZNK8PyQtSlot4callEP7_objectS1_ + 156
      24  QtCore.abi3.so                      0x00000001054be22c _ZNK8PyQtSlot6invokeEPPvP7_objectS0_b + 296
      25  QtCore.abi3.so                      0x00000001054bf200 _ZN13PyQtSlotProxy7unislotEPPv + 92
      26  QtCore.abi3.so                      0x00000001054bf170 _ZN13PyQtSlotProxy11qt_metacallEN11QMetaObject4CallEiPPv + 68
      27  QtCore                              0x0000000106fd31f4 _ZN11QMetaObject8activateEP7QObjectPKS_iPPv + 3144
      28  QtWidgets                           0x0000000105960ec8 _ZNK15QAbstractButton11isCheckableEv + 816
      29  QtWidgets                           0x0000000105960d48 _ZNK15QAbstractButton11isCheckableEv + 432
      30  QtWidgets                           0x0000000105961c48 _ZN15QAbstractButton17mouseReleaseEventEP11QMouseEvent + 172
      31  QtWidgets.abi3.so                   0x0000000106a399ec _ZN14sipQPushButton17mouseReleaseEventEP11QMouseEvent + 148
      32  QtWidgets                           0x00000001058ad8b8 _ZN7QWidget5eventEP6QEvent + 132
      33  QtWidgets                           0x0000000105a0eb24 _ZN11QPushButton5eventEP6QEvent + 204
      34  QtWidgets.abi3.so                   0x0000000106a3a41c _ZN14sipQPushButton5eventEP6QEvent + 224
      35  QtWidgets                           0x0000000105864594 _ZN19QApplicationPrivate13notify_helperEP7QObjectP6QEvent + 272
      36  QtWidgets                           0x00000001058665c0 _ZN12QApplication6notifyEP7QObjectP6QEvent + 5072
      37  QtWidgets.abi3.so                   0x0000000106a5b224 _ZN15sipQApplication6notifyEP7QObjectP6QEvent + 248
      38  QtCore                              0x0000000106f89474 _ZN16QCoreApplication15notifyInternal2EP7QObjectP6QEvent + 292
      39  QtWidgets                           0x0000000105864b34 _ZN19QApplicationPrivate14sendMouseEventEP7QWidgetP11QMouseEventS1_S1_PS1_R8QPointerIS0_Ebb + 808
      40  QtWidgets                           0x00000001058c2860 _ZNK21QWidgetRepaintManager3rhiEv + 11080
      41  QtWidgets                           0x00000001058c1a6c _ZNK21QWidgetRepaintManager3rhiEv + 7508
      42  QtWidgets                           0x0000000105864594 _ZN19QApplicationPrivate13notify_helperEP7QObjectP6QEvent + 272
      43  QtWidgets                           0x00000001058653e8 _ZN12QApplication6notifyEP7QObjectP6QEvent + 504
      44  QtWidgets.abi3.so                   0x0000000106a5b224 _ZN15sipQApplication6notifyEP7QObjectP6QEvent + 248
      45  QtCore                              0x0000000106f89474 _ZN16QCoreApplication15notifyInternal2EP7QObjectP6QEvent + 292
      46  QtGui                               0x00000001076eb9ec _ZN22QGuiApplicationPrivate17processMouseEventEPN29QWindowSystemInterfacePrivate10MouseEventE + 1740
      47  QtGui                               0x0000000107747674 _ZN22QWindowSystemInterface22sendWindowSystemEventsE6QFlagsIN10QEventLoop17ProcessEventsFlagEE + 408
      48  libqcocoa.dylib                     0x0000000107567d74 qt_plugin_instance + 58768
      49  CoreFoundation                      0x0000000187ff7a4c __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 28
      50  CoreFoundation                      0x0000000187ff79e0 __CFRunLoopDoSource0 + 176
      51  CoreFoundation                      0x0000000187ff7750 __CFRunLoopDoSources0 + 244
      52  CoreFoundation                      0x0000000187ff6340 __CFRunLoopRun + 828
      53  CoreFoundation                      0x0000000187ff59ac CFRunLoopRunSpecific + 608
      54  HIToolbox                           0x00000001925a4448 RunCurrentEventLoopInMode + 292
      55  HIToolbox                           0x00000001925a40d8 ReceiveNextEventCommon + 220
      56  HIToolbox                           0x00000001925a3fdc _BlockUntilNextEventMatchingListInModeWithFilter + 76
      57  AppKit                              0x000000018b7d28a4 _DPSNextEvent + 660
      58  AppKit                              0x000000018bfac980 -[NSApplication(NSEventRouting) _nextEventMatchingEventMask:untilDate:inMode:dequeue:] + 716
      59  AppKit                              0x000000018b7c5d50 -[NSApplication run] + 476
      60  libqcocoa.dylib                     0x00000001075658fc qt_plugin_instance + 49432
      61  QtCore                              0x0000000106f93160 _ZN10QEventLoop4execE6QFlagsINS_17ProcessEventsFlagEE + 540
      62  QtCore                              0x0000000106f89b00 _ZN16QCoreApplication4execEv + 112
      63  QtWidgets.abi3.so                   0x0000000106b6439c _ZL22meth_QApplication_execP7_objectS0_ + 96
      64  Python                              0x00000001062722ec cfunction_call + 108
      65  Python                              0x0000000106203378 _PyObject_MakeTpCall + 128
      66  Python                              0x0000000106348a40 _PyEval_EvalFrameDefault + 47144
      67  Python                              0x000000010633cf00 PyEval_EvalCode + 304
      68  Python                              0x00000001063bd448 run_mod + 176
      69  Python                              0x00000001063bc4d8 pyrun_file + 148
      70  Python                              0x00000001063bb43c _PyRun_SimpleFileObject + 304
      71  Python                              0x00000001063bb0ac _PyRun_AnyFileObject + 248
      72  Python                              0x00000001063e9330 pymain_run_file_obj + 220
      73  Python                              0x00000001063e9070 pymain_run_file + 72
      74  Python                              0x00000001063e89a8 Py_RunMain + 1464
      75  Python                              0x00000001063e8b48 pymain_main + 36
      76  Python                       
libc++abi: terminating due to uncaught exception of type NSException
zsh: abort      python3 demo.py
bobshotwell at Bobs-Mac-Studio documents % 
 
This is the same error, under the same comditions, as the error I encountered in my generator application.  Note that line 17 is essentially the same statement, but it is run during initialization.  Line 17 works as expected.
 
I then issued the same ChatGPT 4.0 prompt changing only ‘Pyqt6’ to ‘Tkinter’.  The resulting script worked as expected.
 
Any assistance you can provide will be greatly appreciated.  My Application Generator is dead in the water with this error.  I really don’t want to switch to Tkinter.
 
Bob Shotwell
 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.riverbankcomputing.com/pipermail/pyqt/attachments/20240208/b87d60e2/attachment-0001.htm>


More information about the PyQt mailing list