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
相关产品推荐
相关产品推荐

