QWindowsContext: OleInitialize() failed如何解决?
2025年1月17日 10:38
在使用pyside6进行桌面开发的时候,可能会碰到以下提示信息:
QWindowsContext: OleInitialize() failed: "COM error 0x80010106: 无法在设置线程模式后对其加以更改。"
qt.qpa.window: SetProcessDpiAwarenessContext() failed: 操作成功完成。
Qt's default DPI awareness context is DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2. If you know what you are doing, you can overwrite this default using qt.conf (https://doc.qt.io/qt-6/highdpi.html#configuring-windows).
这个提示信息并不会影响程序的运行,但是总给人一种代码有BUG的感觉。尝试网上提供的各种方法,仍然无法解决这个问题。
这算是一个BUG,当你同时调用pyside6或者其它qt库和pywinauto或者uiautomation的时候就会出现COM库初始化冲突的问题。
pywinauto的作者也在issue上面回复了,最好的方式是在内部需要的地方再调用pywinauto,并且在import pywinauto前面加上:sys.coinit_flags = 2,因为pywinauto最好在MTA多线程模式下运行,不然可能会出错。但是这样仍然会有userwarning,如果不想看到用户警告就使用:
import warnings
warnings.simplefilter("ignore", UserWarning)
~~其实很简单,你只需要将执行代码放到子线程中就可以了。库也在子线程中导入,就可以完全避免这个问题。主线程中只放GUI部分的代码,然后子线程和主线程之间用信号和槽函数通信。~~
综合以上,最新解决方法:
import warnings
warnings.simplefilter("ignore", UserWarning)
sys.coinit_flags = 2
希望对你有所帮助!
专业办理低费率POS机,使用稳定,不乱涨价,不乱扣费,微信联系salesleads
版权声明:本站文章大部分为原创文章,如需转载请提前联系站长获得授权;本站部分内容源自网络,本站承诺绝不用于商业用途,如有冒犯请联系站长删除,谢谢。站长微信:salesleads 本站公众号:企泰7TEC,敬请关注!本文链接:https://7tec.cn/detail/648