dominter

A simple GUI package for small asynchronous web application


Keywords
dom, browser, gui, asynchronous, web, gui-framework, python, web-application
License
MIT
Install
pip install dominter==0.4.0

Documentation

dominter

dominter is a simple GUI (Graphical User Interface) Python package for small asynchronous web application.

Features

  • JavaScript style API and other types of API that can be written shorter.
  • Any tags and attributes can be used.
  • Supports onclick(), onchange() and addEventListener().
  • Supports multiple window.
  • Supports both multiple-instance and single-instance.
  • Supports Element.className and Element.style properties.
  • Supports Window.addEventListener() for events such as 'hashchange'.
  • Supports localStorage and sessionStorage.
  • Supports fake Window.onload() to inform localStorage, sessionStorage and location has been set.
  • Supports invoke() to operate from other threads.
  • Depends only on Tornado.

Installation

pip install dominter

Example

  • Hello world:
from dominter import Window, start_app

class MyWindow(Window):
    def __init__(self):
        super().__init__()
        document = self.document
        self.p1 = document.createElement('p')
        self.p1.textContent = "text content"
        self.btn1 = document.createElement('button')
        self.btn1.textContent = "button1"
        self.btn1.onclick = self.on_btn1
        document.body.appendChild(self.p1)
        document.body.appendChild(self.btn1)

    def on_btn1(self, ev):
        self.p1.textContent = 'Hello world!'

win = MyWindow()
start_app(win)
  • Without class:
from dominter import Window, start_app

win = Window()
document = win.document
tag_p1 = document.createElement('p')
tag_p1.textContent = "text content"

def on_btn1(ev):
    tag_p1.textContent = 'Hello world!'

tag_btn1 = document.createElement('button')
tag_btn1.textContent = "button1"
tag_btn1.onclick = on_btn1
document.body.appendChild(tag_p1)
document.body.appendChild(tag_btn1)
start_app(win)
  • Three types of tag creation and childList attribute
from dominter import Window, start_app

win = Window()
document = win.document
# js like
p1 = document.createElement('p')
p1.textContent = 'by createElement() '
# html like : specify all by text excepts event handler
p2 = document.tag('p _="by tag() "')  # use '_=' for textContent
# individual tag method
p3 = document.p('by p() method. ')
document.body.childList = [p1, p2, p3]
start_app(win)

Individual tag methods: title, style, link, script, br, p, span, div, button, text, checkbox, radio, color, date, month, time, week, number, password, range, select, option, textarea, table, tr, th, td, fieldset, legend, img, a, label, h1, h2, h3, h4, h5, h6, ol, li, ul, section, header, footer

  • multiple window
from dominter import Window, start_app

class MyWindow1(Window):
    def __init__(self):
        super(MyWindow1, self).__init__()
        document = self.document
        self.txt1 = document.text('windows1')
        self.btn1 = document.button('test1', onclick=self.on_btn1)
        document.body.appendChild(self.txt1)
        document.body.appendChild(self.btn1)

    def on_btn1(self, ev):
        self.txt1.value = 'changed1'

class MyWindow2(Window):
    def __init__(self):
        super(MyWindow2, self).__init__()
        document = self.document
        self.txt1 = document.text('windows2')
        self.btn1 = document.button('test1', onclick=self.on_btn1)
        document.body.appendChild(self.txt1)
        document.body.appendChild(self.btn1)

    def on_btn1(self, ev):
        self.txt1.value = 'changed2'

start_app([MyWindow1(),   # localhost:8888/index.html
           MyWindow2()])  # localhost:8888/index1.html
  • multiple-instance and single-instance
from dominter import Window, start_app

class MyWindow1(Window):
    def __init__(self):
        super(MyWindow1, self).__init__()
        document = self.document
        self.txt1 = document.text('windows1')
        self.btn1 = document.button('test1', onclick=self.on_btn1)
        document.body.appendChild(self.txt1)
        document.body.appendChild(self.btn1)

    def on_btn1(self, ev):
        self.txt1.value = 'changed1'

class MyWindow2(Window):
    def __init__(self):
        super(MyWindow2, self).__init__()
        document = self.document
        self.txt1 = document.text('windows2')
        self.btn1 = document.button('test1', onclick=self.on_btn1)
        document.body.appendChild(self.txt1)
        document.body.appendChild(self.btn1)

    def on_btn1(self, ev):
        self.txt1.value = 'changed2'


start_app([MyWindow1(),   # instance for single-instance. localhost:8888/index.html
           MyWindow2])    # class for multiple-instance. localhost:8888/index1.html

Status

Alpha

Copyright (c) 2017-2018 Tamini Bean
License: MIT