htmpy

HTML + Python

HtmPy is let’s you run Python code in a <script> tag on an HTML page when it’s shown on a WebView.

This module is also a bridge between Python and JavaScript so the code has access to the window object. However, the code can be very slow if too many JavaScript functions are called. This can be easily solved by doing the logic in Python and then calling a JavaScript function previously declared on a script tag to modify the DOM.

To take advantage of HtmPy, just create an HTML file and the editor will let you show it. Place your Python code in a script tag like that:

<script type="text/python">
    ...
</script>

To access the window object:

from htmpy import window

Then you can just call any function or get any attribute of the window object to modify the DOM. If you put JavaScript code on a tag before, you can get anything declared on the global scope through the window object. You can do the opposite, store a Python function or variable in the window object and it will be accessible from JavaScript. HtmPy will bridge Python functions so they can be called from JavaScript, so you could use addEventListener for example. However, the functions will run asynchronously and will not return any value.

You can use WebView to show HTML + Python pages on your custom UI.

class htmpy.WebView

A Web View that runs Python code in <script type="text/python"> tags.

did_receive_message(web_view, name, message)

A function called when a script message is received from a webpage. Takes the sender Web View, the name of the message and the content of the message as parameters.

The following example script shows how to send a message from a JavaScript page and how to receive it from the Web View.

import pyto_ui as ui

def did_receive_message(web_view, name, message):
    print(name, message)

web_view = ui.WebView()
web_view.did_receive_message = did_receive_message
web_view.register_message_handler("webView")

web_view.load_html('''

<h1> Hello World </h1>

<script>
    window.webkit.messageHandlers.webView.postMessage({foo:"bar"})
</script>

''')

ui.show_view(web_view, ui.PRESENTATION_MODE_SHEET)
Return type:Callable[[WebView, str, object], None]
class htmpy.JSObject(id: str, web_view: pyto_ui.WebView)

A reference to a JavaScript object. The object is stored in a dictionary declared on the web page. An instance of this class holds the web view and the key of the referenced object in the dictionary.

To use an instance of this class, you can get / set an attribute or call it as a function (it it references a function). When getting or setting an attribute, certain types of values are automatically converted: string, number, boolean and arrays.

Do not manually create instances of JSObject, instead get them from window.