You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

火山引擎 最新活动