PyQt5 QFileDialog не работает с импортом pywinauto

Не уверен, что это ошибка или что-то еще, но это сводит меня с ума. Я использую Python 3.5.4 32bit на Win 7. Файлоискатель PyQt5 не будет работать, если pywinauto будет импортирован в скрипт. Если кто-то может проверить, работает ли этот скрипт для них (проверьте кнопку "Файл"> "Импорт"):

from PyQt5 import QtWidgets
import sys
#import pywinauto

class Window(QtWidgets.QMainWindow):
    def __init__(self):
        super(Window, self).__init__()
        self.setGeometry(50, 50, 800, 600)

        import_folder = QtWidgets.QAction("import", self)
        import_folder.triggered.connect(self.open_folder)

        main_menu = self.menuBar()

        fileMenu = main_menu.addMenu("&File")
        fileMenu.addAction(import_folder)

        self.show()

    def open_folder(self):
        folder = QtWidgets.QFileDialog.getExistingDirectory(self, "Open folder")


app = QtWidgets.QApplication(sys.argv)
main = Window()
sys.exit(app.exec_())

И после этого попробуйте раскомментировать импорт pywinauto и снова запустить скрипт - он не работает для меня. Pywinauto ломает мой файловый менеджер, но он мне нужен в моей программе! Там нет ошибок или что-то, приложение просто зависает и не отвечает. ИДК, что происходит. Если бы кто-нибудь мог проверить это, было бы здорово. Если у вас есть какие-либо рекомендации, ура.

1 ответ

Мы могли бы выяснить, что проблема внутри PyQt, потому что он всегда пытается использовать однопоточный режим (STA), в то время как import pywinauto уже инициализирован COM с многопоточным режимом (MTA). Обходной путь:

import sys
sys.coinit_flags = 2 # STA
import pywinauto

Может выдать это предупреждение (это нормально):

UserWarning: Apply externally defined coinit_flags: 2 
.format(module_sys.coinit_flags), UserWarning)
Другие вопросы по тегам