#python #css #pyqt #pyqt5 #qtwebengine
#python #css #pyqt #pyqt5 #qtwebengine
Вопрос:
Я пытаюсь загрузить шрифт Google в мое приложение pyqt5 QtWebEngine.
Приложение загружает локальный HTML-файл с настройкой css. Я использовал font face для загрузки файла ttf, как показано ниже:
@font-face {
font-family: "Work Sans";
src: url("C:UsersGodwinTIATfontsWorkSans-Regular.ttf") format('truetype');
}
body {
font-family: "Work Sans";
background-color: #eef0f2;
}
шрифт, похоже, игнорируется при загрузке html-файла.
Может кто-нибудь, пожалуйста, помочь.
Редактироватьстрогий текст
Вот мой полный html
@font-face {
font-family: Work Sans;
src: url("Work_Sans/WorkSans-Regular.ttf")
}
div {
font-family: Work Sans;
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<link rel="stylesheet" type="text/css" href="style.css"/>
<title>Document</title>
</head>
<style>
</style>
<body>
<div>
Hello World
</div>
</body>
</html>
Это работает в Chrome, firefox и chrome, но если я использую qtwebengine следующим образом
from PyQt5 import QtCore, QtGui, QtWidgets, QtWebEngineWidgets
if __name__ == "__main__":
import sys
sys.argv.append("--disable-web-security")
app = QtWidgets.QApplication(sys.argv)
wnd = QtWidgets.QWidget()
genVLayout = QtWidgets.QVBoxLayout(wnd)
verticalLayout_7 = QtWidgets.QVBoxLayout()
webEngineViewGen = QtWebEngineWidgets.QWebEngineView(wnd)
webEngineViewGen.setUrl(QtCore.QUrl("about:blank"))
fh = open('main.html','r')
html = fh.read()
webEngineViewGen.setHtml(html)
verticalLayout_7.addWidget(webEngineViewGen)
genVLayout.addLayout(verticalLayout_7)
wnd.show()
sys.exit(app.exec_())
этот шрифт не работает
Комментарии:
1. работает ли это также с qtwebengine, я вижу, что это работает в других браузерах, но почему-то не работает с QtWebEngine
2. позвольте мне проверить остальную часть моего кода
3. я отредактировал свой пост, html работает с браузерами, но не в pyqt
4. смотрите мое решение
Ответ №1:
Если вы используете setHtml()
, то, как указано в документах, внешние ресурсы будут относиться к URL, который вы передаете в качестве вторых параметров:
аннулирует QWebEngineView::setHtml(const QString amp; html, const QUrl amp; baseUrl = QUrl())
[…]
Внешние объекты, такие как таблицы стилей или изображения, на которые ссылаются в документе HTML, расположены относительно baseUrl.
[…]
Итак, в вашем случае решение таково:
import os
from PyQt5 import QtCore, QtGui, QtWidgets, QtWebEngineWidgets
if __name__ == "__main__":
import sys
sys.argv.append("--disable-web-security")
app = QtWidgets.QApplication(sys.argv)
wnd = QtWidgets.QWidget()
genVLayout = QtWidgets.QVBoxLayout(wnd)
verticalLayout_7 = QtWidgets.QVBoxLayout()
webEngineViewGen = QtWebEngineWidgets.QWebEngineView(wnd)
webEngineViewGen.setUrl(QtCore.QUrl("about:blank"))
with open('main.html','r') as fh:
html = fh.read()
current_dir = os.path.dirname(os.path.abspath(__file__))
url = QtCore.QUrl.fromLocalFile(os.path.join(current_dir, "main.html"))
webEngineViewGen.setHtml(html, url)
verticalLayout_7.addWidget(webEngineViewGen)
genVLayout.addLayout(verticalLayout_7)
wnd.show()
sys.exit(app.exec_())
Или просто используйте load()
метод:
import os
from PyQt5 import QtCore, QtGui, QtWidgets, QtWebEngineWidgets
if __name__ == "__main__":
import sys
sys.argv.append("--disable-web-security")
app = QtWidgets.QApplication(sys.argv)
wnd = QtWidgets.QWidget()
genVLayout = QtWidgets.QVBoxLayout(wnd)
verticalLayout_7 = QtWidgets.QVBoxLayout()
webEngineViewGen = QtWebEngineWidgets.QWebEngineView(wnd)
webEngineViewGen.setUrl(QtCore.QUrl("about:blank"))
current_dir = os.path.dirname(os.path.abspath(__file__))
url = QtCore.QUrl.fromLocalFile(os.path.join(current_dir, "main.html"))
webEngineViewGen.load(url)
verticalLayout_7.addWidget(webEngineViewGen)
genVLayout.addLayout(verticalLayout_7)
wnd.show()
sys.exit(app.exec_())
Комментарии:
1. Спасибо eyllanesc. Позвольте мне попробовать это
2. Работает отлично. Спасибо!