【问题标题】:PyQt5 QFileDialog does not work with pywinauto importPyQt5 QFileDialog 不适用于 pywinauto 导入
【发布时间】:2018-03-10 17:29:49
【问题描述】:

不确定这是一个错误还是什么,但它让我发疯了。我在 Win 7 上使用 Python 3.5.4 32 位。如果将 pywinauto 导入到脚本中,PyQt5 的文件查找器将不起作用。如果有人可以检查此脚本是否适用于他们(测试文件>导入按钮):

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 正在破坏我的文件资源管理器,但我的程序中需要它!没有错误或任何东西,应用程序只是冻结并且没有响应。我知道发生了什么事。如果有人可以对此进行测试,那就太好了。如果你有任何指导,干杯。

【问题讨论】:

  • 我从pywinauto 的初始化中得到了一些ModuleNotFoundErrors,所以对我来说它甚至还没有开始。
  • 嗯...进口顺序可能是原因。它是这样工作的:py_inspect.py.
  • 我尝试更改导入顺序,但没有帮助。该代码不使用 QFileDialog 小部件

标签: python qt pyqt pyqt5 pywinauto


【解决方案1】:

我们可以确定问题出在 PyQt 内部,因为它总是尝试使用单线程模式 (STA),而 import pywinauto 已经使用多线程模式 (MTA) 初始化了 COM。解决方法是:

import sys
sys.coinit_flags = 2 # STA
import pywinauto

它可能会产生这个警告(没关系):

UserWarning: Apply externally defined coinit_flags: 2 
.format(module_sys.coinit_flags), UserWarning)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-23
    • 2017-02-05
    相关资源
    最近更新 更多