2016-08-27 7 views
1

я попробовал два различных способа загрузки и показать файл SVG в PyQt:QWebEngineView терпит неудачу загрузки SVG с помощью setHtml (...)

import sys 
from PyQt5.QtWebEngineWidgets import QWebEngineView 
from PyQt5.QtWidgets import QApplication 
from PyQt5.QtCore import QUrl 

app = QApplication(sys.argv) 
webView = QWebEngineView() 

# Variant 1: Reasonably fast 
webView.load(QUrl('file:///Test.svg')) 

# Variant 2: Slow for small files, not working for big ones 
webView.setHtml('<svg>........') 

webView.show() 
sys.exit(app.exec_()) 

Первый способ работает хорошо, но требует файл в качестве входных данных. Я хотел бы генерировать SVG динамически, хотя, так что это не вариант. У кого-нибудь есть идея, почему второй подход настолько медленен или полностью не подходит для более сложных векторных изображений?

+0

Почему вы не используете [QSvgWidget] (http://doc.qt.io/qt-5/qsvgwidget.html)? – ekhumoro

+0

Потому что я использую Javascript для некоторой интерактивности SVG. – sonovice

ответ

1

Функция setHtml не может загрузить какой-либо контент (а не только svg) размером более 2 МБ. Это связано с тем, что Chromium использует URL-адрес схемы data: для загрузки контента (который obvioulsy ограничивает размер до максимальной длины для URL-адреса). Таким образом, кажется, что единственный вариант - загрузить svg из локального файла.

+0

Это довольно неудачно, но хорошо ... Спасибо за объяснение. – sonovice

Смежные вопросы