Skip to content

QtWebView API

QtWebView is a Qt widget wrapper for seamless integration with Qt-based DCC applications.

Import

python
from auroraview import QtWebView

Constructor

python
QtWebView(
    parent: QWidget = None,
    url: str = None,
    html: str = None,
    width: int = 800,
    height: int = 600,
    auto_prewarm: bool = True,
)

Parameters

ParameterTypeDefaultDescription
parentQWidgetNoneParent Qt widget
urlstrNoneURL to load
htmlstrNoneHTML content to load
widthint800Widget width
heightint600Widget height
auto_prewarmboolTrueAuto pre-warm WebView2

Basic Usage

python
from auroraview import QtWebView

# Simple usage
webview = QtWebView(
    parent=parent_widget,
    url="http://localhost:3000"
)
webview.show()

Methods

load_url(url: str)

Load a URL.

python
webview.load_url("https://example.com")

load_html(html: str)

Load HTML content.

python
webview.load_html("<h1>Hello</h1>")

emit(event: str, data: Any)

Emit an event to JavaScript.

python
webview.emit("update", {"value": 42})

bind_api(obj: object)

Bind an API object.

python
class MyAPI:
    def get_data(self):
        return {"value": 42}

webview.bind_api(MyAPI())

on(event: str)

Register an event handler.

python
@webview.on("button_clicked")
def handle_click(data):
    print(f"Clicked: {data}")

Qt Widget Methods

QtWebView inherits from QWidget, so all standard Qt methods are available:

python
# Qt widget methods
webview.setMinimumSize(400, 300)
webview.setMaximumSize(1920, 1080)
webview.resize(800, 600)
webview.move(100, 100)
webview.setVisible(True)
webview.setEnabled(True)

Docking Support

python
from auroraview import QtWebView
from qtpy.QtWidgets import QDockWidget
from qtpy.QtCore import Qt

# Create dock widget
dock = QDockWidget("My Tool", main_window)

# Create WebView
webview = QtWebView(parent=dock)
webview.load_url("http://localhost:3000")

# Set as dock content
dock.setWidget(webview)
main_window.addDockWidget(Qt.RightDockWidgetArea, dock)

webview.show()

Layout Integration

python
from auroraview import QtWebView
from qtpy.QtWidgets import QVBoxLayout, QDialog

dialog = QDialog(parent_widget)
layout = QVBoxLayout(dialog)

webview = QtWebView(parent=dialog)
webview.load_url("http://localhost:3000")

layout.addWidget(webview)
dialog.show()
webview.show()

WebView2 Pre-warming

QtWebView automatically pre-warms WebView2 on first instantiation:

python
from auroraview.integration.qt import WebViewPool, QtWebView

# Explicit pre-warm (optional)
WebViewPool.prewarm()

# Check status
if WebViewPool.has_prewarmed():
    print(f"Pre-warm took {WebViewPool.get_prewarm_time():.2f}s")

# Disable auto-prewarm
webview = QtWebView(parent=parent, auto_prewarm=False)

# Cleanup (automatic on exit)
WebViewPool.cleanup()

Lifecycle Management

QtWebView automatically handles cleanup when the parent widget is destroyed:

python
# WebView closes automatically when parent is destroyed
webview = QtWebView(parent=dcc_main_window())
webview.show()

Example: DCC Tool

python
from auroraview import QtWebView

class MyDCCTool(QtWebView):
    def __init__(self, parent=None):
        super().__init__(parent=parent, width=400, height=600)
        self.load_url("http://localhost:3000")
        self._setup_api()

    def _setup_api(self):
        self.bind_api(self)

    def get_scene_data(self) -> dict:
        """API method callable from JavaScript"""
        return {"objects": ["cube", "sphere"]}

    def select_object(self, name: str = "") -> dict:
        """API method callable from JavaScript"""
        # DCC-specific selection logic
        return {"ok": True, "selected": name}

# Usage
tool = MyDCCTool(parent=dcc_main_window())
tool.show()

Signals

QtWebView emits Qt signals for various events:

python
# Connect to Qt signals
webview.destroyed.connect(lambda: print("WebView destroyed"))

Thread Safety

QtWebView is designed to be used from the main Qt thread. All WebView operations should be performed on the main thread.

For background operations, use Qt's signal/slot mechanism:

python
from qtpy.QtCore import QThread, Signal

class Worker(QThread):
    result_ready = Signal(dict)

    def run(self):
        # Background work
        result = {"data": "processed"}
        self.result_ready.emit(result)

# Connect to WebView
worker = Worker()
worker.result_ready.connect(lambda data: webview.emit("data_ready", data))
worker.start()

Released under the MIT License.