PyInstaller打包PySide6程序出现"Unable to open monitor interface to \\.\DISPLAY1:"警告的解决求助
PyInstaller打包PySide6程序出现"Unable to open monitor interface to \.\DISPLAY1:"警告的解决求助
大家好,我最近碰到了一个挺棘手的小问题,想请教下社区的各位:
我用PySide6开发项目已经好几年了,一直用PyInstaller打包分发。前阵子更新开发环境后,打包出来的exe运行时会在控制台输出奇怪的警告,但是直接运行Python脚本完全没问题。
这个警告是:
qt.qpa.screen: "Unable to open monitor interface to \\\\.\\DISPLAY1:" "The operation completed successfully."
我已经在全新的conda环境里复现了这个问题,环境里只有这些依赖(包括它们的子依赖):
pyside6 6.8.2 py312h2ee7485_1 conda-forge pyinstaller 6.10.0 py312h42d2eef_0 conda-forge
复现用的极简脚本如下:
import sys from PySide6.QtWidgets import QApplication, QMainWindow def main(): app = QApplication(sys.argv) win = QMainWindow() win.show() sys.exit(app.exec()) if __name__ == "__main__": main()
打包用的是默认命令:pyinstaller my_script.py
我用的是Windows10系统,试过两台不同分辨率的显示器(1920x1080 和 3440x1440),都能复现这个问题。
另外在我那个UI更复杂的主项目里,还看到过类似的关联警告,但暂时没写出极简复现代码:
QWindowsWindow::setGeometry: Unable to set geometry 1955x1028+0+23 (frame: 1971x1067-8-8) on QWidgetWindow/"MainWindowWindow" on "\\.\DISPLAY1". Resulting geometry: 1920x1017+0+23 (frame: 1936x1056-8-8) margins: 8, 31, 8, 8 minimum size: 1955x1028 MINMAXINFO(maxSize=POINT(x=0, y=0), maxpos=POINT(x=0, y=0), maxtrack=POINT(x=0, y=0), mintrack=POINT(x=1971, y=1067)))
(比如用win.setGeometry设置超过屏幕分辨率的尺寸时就会出现这个)
我之前找到过一个QT的旧bug报告,但它没解释为什么只有PyInstaller打包后才会触发这个问题。我也尝试过修改spec文件,比如添加数据文件、自定义钩子,但目前还没找到头绪。
现在的需求是:要么找到根本原因解决掉这个警告,要么能找到方法把这个警告给屏蔽掉——注意我不能隐藏控制台,因为项目需要用到控制台输出。
希望有碰到过类似问题或者熟悉PyInstaller+PySide6打包细节的朋友能给点思路,谢谢大家!
备注:内容来源于stack exchange,提问作者user405476




