Можно ли запустить javascript код canvas внутри pyqt5?
Мне стало интересно можно ли запустить javascript, который генерирует (работает с) canvas окном внутри PyQt5?
python
import sys
from PyQt5 import QtWidgets
class Test(QtWidgets.QWidget):
def __init__(self):
super().__init__()
self.resize(500, 500)
lay = QtWidgets.QVBoxLayout(self)
canvas_widget = QtWidgets.QWidget(self)
canvas_widget.setStyleSheet('background:red;')
lay.addWidget(canvas_widget)
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
w = Test()
w.show()
sys.exit(app.exec_())
javascript
var canv = document.getElementById('canvas');
var ctx = canv.getContext('2d');
canv.width = window.innerWidth;
canv.height = window.innerHeight;
ctx.fillStyle = 'magenta'
ctx.fillRect(50,50,300,200)
ctx.arc(canv.width/2,canv.height/2,100,0,Math.PI)
ctx.fill()
Если да, то что мне для этого лучше всего сделать? Что нужно скачать (подключить).
Желательно объяснить как можно более детально.
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
то что предложил Александр, может выглядеть примерно так:
import sys
from PyQt5.QtWidgets import QApplication
from PyQt5.QtWebEngineWidgets import QWebEngineView
from PyQt5.QtCore import QTimer, QDateTime, QUrl
html = """
<html>
<head>
<meta charset="utf-8">
<title>background-image</title>
<style>
body {
background-image: url('file:///D:/_Qt/__Qt/image.jpg ');
background-color: #c7b39b;
}
p {
color: #f00;
font: bold italic 15pt 'Comic Sans MS';
}
</style>
</head>
<body>
<p>Hello World</p>
</body>
</html>
"""
def append():
some_html = "<p>{}</p>".format(QDateTime.currentDateTime().toString())
page.runJavaScript("document.body.innerHTML += '{}'".format(some_html)
)
if __name__ == '__main__':
app = QApplication(sys.argv)
view = QWebEngineView()
timer = QTimer()
timer.timeout.connect(append)
page = view.page()
page.loadFinished.connect(lambda: timer.start(1000))
page.setHtml(html, baseUrl=QUrl('file://'))
view.resize(512, 384)
view.show()
sys.exit(app.exec_())
