You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyQt GUI在高分辨率(高DPI)屏幕下字体错乱问题求助

PyQt5高DPI屏幕下GUI字体错乱问题求解

我在1366*768低分辨率屏幕上使用Qt Designer设计了GUI界面,但在高分辨率(高DPI)屏幕中运行程序时,几乎所有字体都出现错乱。登录窗口、新建用户窗口、产品窗口分别在高DPI和低分辨率屏幕下的对比截图如下:[对应截图]

我已尝试如下方案,但问题仍未解决,寻求可行方案:

if __name__ == "__main__":
    app = QApplication(sys.argv)

    app.setAttribute(Qt.AA_EnableHighDpiScaling, True)
    app.setAttribute(Qt.AA_UseHighDpiPixmaps, True)

    login_window_started()
    sys.exit(app.exec_())

可行解决方案建议

  • 调整属性设置顺序:将高DPI相关属性设置在QApplication实例化之前,部分Qt属性需要在应用启动前加载才能生效:
if __name__ == "__main__":
    QApplication.setAttribute(Qt.AA_EnableHighDpiScaling, True)
    QApplication.setAttribute(Qt.AA_UseHighDpiPixmaps, True)
    app = QApplication(sys.argv)

    login_window_started()
    sys.exit(app.exec_())
  • 启用高精度缩放策略:添加缩放因子取整规则,避免缩放过程中因取整导致的字体显示错乱:
if __name__ == "__main__":
    QApplication.setAttribute(Qt.AA_EnableHighDpiScaling, True)
    QApplication.setAttribute(Qt.AA_UseHighDpiPixmaps, True)
    app = QApplication(sys.argv)
    # 设置缩放因子不自动取整
    app.setHighDpiScaleFactorRoundingPolicy(Qt.HighDpiScaleFactorRoundingPolicy.PassThrough)

    login_window_started()
    sys.exit(app.exec_())
  • 检查Qt Designer布局规范:确保所有控件使用布局管理器(如QVBoxLayout、QGridLayout)而非固定坐标定位,避免高DPI下控件错位连带字体显示异常;设计时优先使用相对字体大小(如调用pointSizeF()设置,而非固定像素值)。

  • 手动适配系统DPI:读取系统缩放因子,全局调整字体大小:

from PyQt5.QtGui import QFont

if __name__ == "__main__":
    QApplication.setAttribute(Qt.AA_EnableHighDpiScaling, True)
    QApplication.setAttribute(Qt.AA_UseHighDpiPixmaps, True)
    app = QApplication(sys.argv)

    # 获取系统DPI缩放比例
    screen = app.primaryScreen()
    scale_factor = screen.logicalDotsPerInch() / 96  # 96为标准DPI值
    # 全局调整字体
    global_font = QFont()
    global_font.setPointSizeF(global_font.pointSizeF() * scale_factor)
    app.setFont(global_font)

    login_window_started()
    sys.exit(app.exec_())

内容的提问来源于stack exchange,提问作者Arash Rafiee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 06:03:18