1
0
mirror of https://github.com/bec-project/bec_widgets.git synced 2026-05-04 05:44:23 +02:00
Files
bec_widgets/bec_widgets/widgets/editors/website/website.py
T

130 lines
3.0 KiB
Python

from qtpy.QtCore import Property, QUrl, Slot, qInstallMessageHandler
from qtpy.QtWebEngineWidgets import QWebEngineSettings, QWebEngineView
from qtpy.QtWidgets import QApplication, QVBoxLayout, QWidget
from bec_widgets.utils.bec_widget import BECWidget
def suppress_qt_messages(type_, context, msg):
if context.category in ["js", "default"]:
return
print(msg)
qInstallMessageHandler(suppress_qt_messages)
class WebsiteWidget(BECWidget, QWidget):
"""
A simple widget to display a website
"""
PLUGIN = True
ICON_NAME = "travel_explore"
USER_ACCESS = ["set_url", "get_url", "reload", "back", "forward"]
def __init__(
self, parent=None, url: str = None, config=None, client=None, gui_id=None, **kwargs
):
super().__init__(parent=parent, client=client, gui_id=gui_id, config=config, **kwargs)
layout = QVBoxLayout()
layout.setContentsMargins(0, 0, 0, 0)
self.website = QWebEngineView()
layout.addWidget(self.website)
self.setLayout(layout)
self.set_url(url)
self._loaded = False
self.website.loadFinished.connect(self._on_load_finished)
def wait_until_loaded(self):
while not self._loaded:
QApplication.processEvents()
def _on_load_finished(self):
"""
Callback when the website has finished loading
"""
self._loaded = True
@Property(str)
def url(self) -> str:
"""
The url of the website widget
Returns:
str: The url
"""
return self.get_url()
@url.setter
def url(self, url: str) -> None:
"""
Set the url of the website widget
Args:
url (str): The url to set
"""
self.set_url(url)
@Slot(str)
def set_url(self, url: str) -> None:
"""
Set the url of the website widget
Args:
url (str): The url to set
"""
if not url:
return
if not isinstance(url, str):
return
self._loaded = False
self.website.setUrl(QUrl(url))
def get_url(self) -> str:
"""
Get the current url of the website widget
Returns:
str: The current url
"""
return self.website.url().toString()
@Slot()
def reload(self):
"""
Reload the website
"""
QWebEngineView.reload(self.website)
@Slot()
def back(self):
"""
Go back in the history
"""
QWebEngineView.back(self.website)
@Slot()
def forward(self):
"""
Go forward in the history
"""
QWebEngineView.forward(self.website)
def cleanup(self):
"""
Cleanup the widget
"""
self.website.page().deleteLater()
super().cleanup()
if __name__ == "__main__":
import sys
app = QApplication(sys.argv)
mainWin = WebsiteWidget(url="https://scilog.psi.ch")
mainWin.show()
sys.exit(app.exec())