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)