在PyQt5中的HiDPI显示上使用SVG图标

时间:2019-10-17 10:05:08

标签: python svg pyqt pyqt5 hidpi

我想在我的PyQt5应用程序中使用高分辨率图标。但是,以下代码片段在我的HiDPI macOS平台上生成了非常低分辨率的渲染(可以从here下载所需的图标):

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QAction
from PyQt5.QtGui import QIcon


app = QApplication(sys.argv)
main = QMainWindow()
icon = QIcon("waves-24px.svg")
action = QAction(icon, "Test")
toolbar = main.addToolBar("toolbar")
toolbar.addAction(action)
toolbar.show()
main.show()
sys.exit(app.exec_())

结果显示如下(请注意图标的分辨率较低): enter image description here

我在做什么错了?

2 个答案:

答案 0 :(得分:1)

结果是有一个简单的解决方案:

app.setAttribute(Qt.AA_UseHighDpiPixmaps)

答案 1 :(得分:0)

从SVG加载图标时,QT首先将其渲染到像素图中。默认情况下,像素图的尺寸是从svg页面大小中选取的,即svg根元素的width和height属性。为您的svg渲染器生成24px x 24px像素图。因此,Qt首先将图片加载到低分辨率缓冲区中,然后再缩放ins内容。要解决此问题,请尝试扩大svg的width和height属性以增加页面大小和缩放图像。在Inkscape中,页面大小设置位于“文件”>“文档属性”>“页面”选项卡中。