我在 Python 2.7.3 x64 中使用 PySide,在运行我的 Qt 应用程序时,我注意到 Wing IDE 的输出中出现以下错误。
Qt:无法初始化 OLE(错误 80010106)
这似乎不会导致问题,直到我在 Wing 之外运行 Qt 应用程序时关闭它。关闭的应用程序会抛出 pythonw.exe windows 错误。我假设这两者是相关的,因为即使是最基本的 Qt 应用程序也会发生这种情况。但我不确定这笔交易是什么。任何想法将不胜感激!
我在 Python 2.7.3 x64 中使用 PySide,在运行我的 Qt 应用程序时,我注意到 Wing IDE 的输出中出现以下错误。
Qt:无法初始化 OLE(错误 80010106)
这似乎不会导致问题,直到我在 Wing 之外运行 Qt 应用程序时关闭它。关闭的应用程序会抛出 pythonw.exe windows 错误。我假设这两者是相关的,因为即使是最基本的 Qt 应用程序也会发生这种情况。但我不确定这笔交易是什么。任何想法将不胜感激!
问题在于 Qt在已经初始化为 MTA 单元模型的线程上调用OleInitialize或CoInitialize 。
那些在导入 clr 后遇到问题的人应该注意,在 .Net 世界中,线程默认初始化为 MTA,尽管这可以通过调用SetApartmentState或使用STAThreadAttribute来更改。
我知道这很旧,但我得出了与 this.myself 相同的结论,因此我决定将其发布为将来其他人的答案。
对我来说问题是另一个库正在导入clr
模块以使用一些 .NET 库,这在我以后运行时导致了这些问题:
appQT = QtGui.QApplication([])
通过在程序开始时(甚至在导入之前)初始化 Qt,您可以保证它会在clr
导入之前被初始化。然后,您可以将 Qt 初始化缓慢地移回程序中,直到再次出现错误(如果您不知道正在导入哪个库clr
)。
这不是一个理想的解决方案,但它确实对我有用。
此问题通过调用CoInitialize
before得到解决import clr
: