0

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

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_())

这是结果的样子(注意图标的低分辨率): 在此处输入图像描述

我究竟做错了什么?

4

2 回答 2

4

原来有一个简单的解决方案:

app.setAttribute(Qt.AA_UseHighDpiPixmaps)
于 2019-11-12T13:49:38.793 回答
0

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

于 2019-10-17T11:23:24.140 回答