QFileDialog не открывает диалоговое окно на macOS

#python #macos #pyqt5 #qfiledialog

Вопрос:

Я кодирую графический интерфейс Qt (PyQt5) в Python на macOS. Я запускаю свою программу, используя python test.py терминал in.

Когда я пытаюсь использовать статический метод QFileDialog, такой как QFileDialog.GetOpenFileName, я получаю следующую ошибку вместо открытия диалогового окна:

 2021-10-11 12:06:48.411 python[49048:17688470]  [NSXPCSharedListener endpointForReply:withListenerName:]: an error occurred while attempting to obtain endpoint for listener 'com.apple.view-bridge': Connection interrupted
 

Я в состоянии обойти это, постоянно перезапуская приложение и пытаясь открыть диалоговое окно, пока оно не заработает. Обычно он работает после 3-5 перезапусков. Это не идеально подходит для будущих пользователей или, если есть данные, которые необходимо сохранить в приложении перед перезапуском.

Вот минимальный воспроизводимый пример сценария:

 import sys
from PyQt5.QtWidgets import (
    QApplication,
    QWidget,
    QVBoxLayout,
    QPushButton,
    QFileDialog
    )


class MainWindow(QWidget):
    """The main window of the application"""

    def __init__(self, *args, **kwargs):
        """Initializes and shows the main window of the application"""

        super().__init__(*args, **kwargs)
        self.setLayout(QVBoxLayout())

        # open file button
        self.open_file_button = QPushButton(self)
        self.open_file_button.setText("Open File")
        self.open_file_button.clicked.connect(self.open_file)

        self.layout().addWidget(self.open_file_button)

        self.show()

    def open_file(self):
        file_name, _ = QFileDialog.getOpenFileName(self)

        if file_name:
            ...


if __name__ == "__main__":
    app = QApplication(sys.argv)
    main_window = MainWindow()
    sys.exit(app.exec())
 

Версия для macOS: Каталина 10.15.1 (19B88)

Версия Python: 3.8.11

Версия PyQt5: 5.15.4

Версия PyQt5-Qt5: 5.15.2

Комментарии:

1. Есть несколько отчетов, связанных с этим (см. Это ), и, похоже, это проблема с этой конкретной версией Catalina (я бы сказал, что она немного устарела). Можете ли вы попробовать другую версию Каталины? В этом случае единственным возможным обходным путем является использование этой DontUseNativeDialog опции.

2. Я обновился до Catalina 10.15.7 и до сих пор не сталкивался с этой проблемой. На данный момент мне кажется, что ваш ответ приемлем для меня, учитывая, сколько лет Каталине 10.15.1.