PyQt6调用QFontDatabase.addApplicationFont触发0xC0000005错误求助
PyQt6调用QFontDatabase.addApplicationFont触发Windows访问违规错误(0xC0000005)
问题背景
使用PyQt6 6.5.2编写代码时,执行字体加载逻辑会导致程序崩溃,退出码为-1073741819 (0xC0000005),注释掉字体加载的前两行代码后程序可正常运行。
原始代码片段:
self.font_id = QFontDatabase.addApplicationFont('conf/font.otf') self.font_family = QFontDatabase.applicationFontFamilies(font_id) for name, classtype in self.__dict__.items(): try: classtype.setFont(QFont(self.font_family[0], int(self.base_cfg['Config']['fontSize']), QFont.Weight.Bold)) except AttributeError: pass
最小复现代码
仅执行以下两行代码就会触发崩溃:
from PyQt6.QtGui import QFontDatabase QFontDatabase.addApplicationFont('conf/font.otf')
环境信息
- Python版本:3.9.4 / 3.10.2 / 3.11.4
- 操作系统:Windows 11 版本22621.2070
- PyQt6版本:6.5.2
调试报错信息
在PyCharm运行配置中添加-X dev解释器选项后,得到以下访问违规报错:
Windows fatal exception: access violation Thread 0x00002a00 (most recent call first): File "D:\Software\PyCharm Community Edition 2023.2\plugins\python-ce\helpers\pydev\pydevd.py", line 138 in _on_run File "D:\Software\PyCharm Community Edition 2023.2\plugins\python-ce\helpers\pydev\_pydevd_bundle\pydevd_comm.py", line 219 in run File "D:\Software\Python\lib\threading.py", line 1009 in _bootstrap_inner File "D:\Software\Python\lib\threading.py", line 966 in _bootstrap Thread 0x00004cd4 (most recent call first): File "D:\Software\PyCharm Community Edition 2023.2\plugins\python-ce\helpers\pydev\_pydevd_bundle\pydevd_comm.py", line 293 in _on_run File "D:\Software\PyCharm Community Edition 2023.2\plugins\python-ce\helpers\pydev\_pydevd_bundle\pydevd_comm.py", line 219 in run File "D:\Software\Python\lib\threading.py", line 1009 in _bootstrap_inner File "D:\Software\Python\lib\threading.py", line 966 in _bootstrap Thread 0x00004728 (most recent call first): File "D:\Software\Python\lib\threading.py", line 324 in wait File "D:\Software\Python\lib\queue.py", line 180 in get File "D:\Software\PyCharm Community Edition 2023.2\plugins\python-ce\helpers\pydev\_pydevd_bundle\pydevd_comm.py", line 368 in _on_run File "D:\Software\PyCharm Community Edition 2023.2\plugins\python-ce\helpers\pydev\_pydevd_bundle\pydevd_comm.py", line 219 in run File "D:\Software\Python\lib\threading.py", line 1009 in _bootstrap_inner File "D:\Software\Python\lib\threading.py", line 966 in _bootstrap
排查与解决建议
- 检查字体文件完整性:
字体文件损坏或格式不兼容是常见触发原因,替换为已知可用的OTF字体测试,或重新导出当前字体文件确保无损坏。 - 使用绝对路径加载字体:
相对路径可能因工作目录问题导致Qt无法找到文件,改用绝对路径:import os font_path = os.path.abspath(os.path.join(os.path.dirname(__file__), 'conf/font.otf')) QFontDatabase.addApplicationFont(font_path) - 验证字体格式兼容性:
部分OTF字体包含Qt无法处理的特殊结构,用FontForge等工具打开并重新导出为标准OTF格式后再测试。 - 调整PyQt6版本:
6.5.2版本可能存在Windows平台字体加载bug,尝试降级到6.5.1或升级至最新稳定版:pip uninstall pyqt6 -y pip install pyqt6==6.5.1 - 排除IDE调试干扰:
在纯命令行下运行最小复现代码,确认是否是PyCharm调试工具导致的冲突:python your_script.py - 修复Qt运行环境:
卸载并重新安装PyQt6,确保依赖的Qt运行库完整无损坏。
内容的提问来源于stack exchange,提问作者Yukari_Shiina
相关产品推荐
相关产品推荐

