Использование значков SVG на дисплеях HiDPI в PyQt5 - PullRequest
0 голосов
/ 17 октября 2019

Я хотел бы использовать значки высокого разрешения в своем приложении 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_())

Вот как выглядит результат(обратите внимание на низкое разрешение значка): enter image description here

Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 12 ноября 2019

Оказывается, есть простое решение:

app.setAttribute(Qt.AA_UseHighDpiPixmaps)
0 голосов
/ 17 октября 2019

При загрузке иконки из SVG QT сначала отображает ее в растровое изображение. По умолчанию размеры растрового изображения выбираются из размера страницы svg, а именно из атрибутов width и height корневого элемента svg. Для вашего svg рендерера выдает растровое изображение размером 24px x 24px. Итак, Qt сначала загружает ваше изображение в буфер низкого разрешения, а затем масштабирует содержимое ins. Чтобы это исправить, попробуйте увеличить атрибуты svg width и height, чтобы увеличить размер страницы и масштабировать изображение. В Inkscape параметры размера страницы находятся в меню «Файл»> «Свойства документа»> вкладка «Страница».

...