PySide2在Windows高DPI≥125%缩放下光标无法点击的异常问题
问题背景
- 异常出现环境:Windows 10、Windows 11 系统,使用 5.15.2.1 版本 PySide2 开发桌面应用
- 触发条件:系统开启高DPI显示,显示缩放比例设置为125%及以上
- 异常表现:应用可正常启动、界面渲染无明显异常,但无法进行任何交互操作,光标状态异常,点击操作无任何响应
- 现象参考:

根因说明
PySide2 5.15.2.1 版本内置的高DPI适配逻辑在Windows平台非整数缩放场景存在坐标映射bug:界面渲染层按缩放后的尺寸绘制,但窗口消息层的点击坐标没有做对应换算,导致点击位置和实际控件位置完全错位,表现为无法点击、光标状态异常。
修复方案
代码层修复(推荐,一劳永逸)
必须在创建QApplication实例之前,显式配置Qt的高DPI相关属性,注意配置代码不能放在QApplication创建之后,否则不生效。参考代码如下:
# 以下配置必须放在PySide2相关逻辑的最靠前位置 import sys from PySide2.QtCore import Qt from PySide2.QtWidgets import QApplication # 开启高DPI缩放支持 QApplication.setAttribute(Qt.AA_EnableHighDpiScaling, True) # 启用高DPI下的高清图标渲染 QApplication.setAttribute(Qt.AA_UseHighDpiPixmaps, True) # 关闭原生控件兄弟节点创建逻辑,修复非整数缩放下坐标错位问题 QApplication.setAttribute(Qt.AA_DontCreateNativeWidgetSiblings, True) if __name__ == "__main__": app = QApplication(sys.argv) # 后续业务窗口初始化逻辑写在此处 # ... sys.exit(app.exec_())
无代码修改兜底方案
如果暂时无法修改代码,可通过以下方式解决:
- 兼容性设置修复:右键点击程序exe文件,选择「属性-兼容性-更改高DPI设置」,勾选「替代高DPI缩放行为」,缩放执行主体选择「应用程序」,保存设置后重启程序即可
- 版本升级修复:将PySide2版本升级到5.15.2.3及以上官方正式版本,该版本已经合入Windows平台非整数缩放的坐标映射修复补丁,无需额外配置即可正常运行
- 临时规避:将系统显示缩放比例调整为100%、200%这类整数缩放值,即可恢复交互,仅适合临时调试使用,不推荐作为面向用户的长期方案
内容的提问来源于stack exchange,提问作者Fakhreddine
相关产品推荐
相关产品推荐

