Skip to main content

Pylon 🏗️

Pylon is a framework that allows you to easily create desktop applications using Python and web technologies. 🐍🌐

Key Features 🚀

  • Web-based GUI generation
  • System tray icon support 🖥️
  • Multi-window management 🪟
  • Bridge API between Python and JavaScript 🌉
  • Single instance application support

Installation 📦

Direct Installation

pip install pylon-desktop

Creating a React + Pylon Project

Boilerplate address: https://github.com/python-pylon/pylon-react-boilerplate

Usage 🛠️

Creating a Basic Application

from pylon import PylonApp

app = PylonApp(single_instance=True, icon_path="assets/icon.ico")

window = app.create_window(
    "https://www.example.com",
    title="Pylon Browser",
)

app.run()

Setting Up System Tray

from pylon import TrayEvent

def on_double_click():
    print("Tray icon was double-clicked.")

app.set_tray_actions({
    TrayEvent.DoubleClick: on_double_click,
})
app.set_tray_menu_items([
    {"label": "Show Window", "callback": app.show_main_window},
    {"label": "Quit", "callback": app.quit},
])
app.setup_tray()

Creating Python-JavaScript Bridge API

from pylon import PylonAPI, Bridge

class CustomAPI(PylonAPI):
    @Bridge(str, int, result=str)
    def echo(self, message, number):
        return f"Message received in Python: {message}, {number}"

    @Bridge(result=str)
    def getAppVersion(self):
        return "1.0.0"

    @Bridge(result=str)
    def create_window(self):
        window = app.create_window(
            "alert.html",
            js_apis=[CustomAPI()],
            width=300,
            height=200,
            x=100,
            y=100,
        )
        return window.id

window = app.create_window(
    "index.html",
    js_apis=[CustomAPI()],
    # Other options...
)
// CustomAPI method usage example

// Using the echo method
pylon.CustomAPI.echo('Hello', 42).then((result) => {
  console.log(result); // "Message received in Python: Hello, 42" output
});

// Using the getAppVersion method
pylon.CustomAPI.getAppVersion().then((version) => {
  console.log('App version:', version); // "App version: 1.0.0" output
});

// Using the create_window method
pylon.CustomAPI.create_window().then((windowId) => {
  console.log('New window ID:', windowId); // "New window ID: [generated window ID]" output
});

// Example using async/await syntax
async function useCustomAPI() {
  try {
    const echoResult = await pylon.CustomAPI.echo('Test', 100);
    console.log(echoResult);

    const appVersion = await pylon.CustomAPI.getAppVersion();
    console.log('Current app version:', appVersion);

    const newWindowId = await pylon.CustomAPI.create_window();
    console.log('Newly created window ID:', newWindowId);
  } catch (error) {
    console.error('Error occurred during API call:', error);
  }
}

useCustomAPI();

API Reference 📚

PylonApp

  • create_window(url, title, frame, context_menu, js_apis, enable_dev_tools, width, height, x, y) -> BrowserWindow: Creates a new window and returns a BrowserWindow object.
  • run(): Runs the application.
  • set_tray_actions(actions): Sets tray icon actions.
  • set_tray_menu_items(items): Sets tray menu items.
  • setup_tray(): Sets up the system tray.
  • get_windows(): Returns a list of all browser windows.
  • show_main_window(): Shows the first window.
  • get_window_by_id(window_id): Returns the window with the given ID.
  • hide_window_by_id(window_id): Hides the window with the given ID.
  • show_window_by_id(window_id): Shows the window with the given ID.
  • close_window_by_id(window_id): Closes the window with the given ID.
  • close_all_windows(): Closes all windows.
  • quit(): Quits the application.
  • toggle_fullscreen_by_id(window_id): Toggles fullscreen mode for the window with the given ID.
  • minimize_window_by_id(window_id): Minimizes the window with the given ID.
  • maximize_window_by_id(window_id): Maximizes the window with the given ID.
  • restore_window_by_id(window_id): Restores the window with the given ID to its normal state.

BrowserWindow

  • __init__(app, title, url, frame, context_menu, js_apis, enable_dev_tools, width, height, x, y): Initializes a new browser window.
  • load_html_file(file_path): Loads a local HTML file into the web view.
  • _on_load_finished(ok): Handles the event when the web page load is finished.
  • open_dev_window(): Opens the developer tools window.
  • get_window_properties(): Returns the properties of the window.
  • closeEvent(event): Handles the event when the window is closed.
  • hide_window(): Hides the window.
  • show_window(): Shows the window.
  • close_window(): Closes the window.
  • toggle_fullscreen(): Toggles fullscreen mode for the window.
  • minimize_window(): Minimizes the window.
  • maximize_window(): Maximizes the window.
  • restore_window(): Restores the window to its normal state.

PylonAPI

Used to define bridge APIs for communication between Python and JavaScript.

  • @Bridge(*arg_types, result=return_type): Converts a Python method into a function callable from JavaScript.
    • arg_types: Types of function arguments (multiple possible)
    • result: Type of return value (optional)

License 📄

This project is licensed under the terms of the Apache License 2.0. See the LICENSE file for details.

Contributing 🤝

(Add information about how to contribute here)

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pylon_desktop-0.2.2.tar.gz (12.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pylon_desktop-0.2.2-py3-none-any.whl (12.9 kB view details)

Uploaded Python 3

File details

Details for the file pylon_desktop-0.2.2.tar.gz.

File metadata

  • Download URL: pylon_desktop-0.2.2.tar.gz
  • Upload date:
  • Size: 12.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.3 CPython/3.12.2 Windows/10

File hashes

Hashes for pylon_desktop-0.2.2.tar.gz
Algorithm Hash digest
SHA256 47e8192a1e32ba49f6d92c66370a2ba311a5b512009e41e76800e0a13d8b35ec
MD5 fb54f4d7f581c584366abc35ff8975ac
BLAKE2b-256 f1229645821cd29fec220ca5329fa84413e38a49e8ed4635342d01a59288edd4

See more details on using hashes here.

File details

Details for the file pylon_desktop-0.2.2-py3-none-any.whl.

File metadata

  • Download URL: pylon_desktop-0.2.2-py3-none-any.whl
  • Upload date:
  • Size: 12.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.3 CPython/3.12.2 Windows/10

File hashes

Hashes for pylon_desktop-0.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 6c33d7217612ded672906892925f7626c535dced616f4312cc8de5ff82144ffb
MD5 d09f877df35d0e30ad45a747a4bc2f61
BLAKE2b-256 c218cffc1da808df1bcab17686eeb4637d89f4b31e75dc2b3222416c1b8487bd

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.2.2 This release

2 files

0.2.1

2 files

0.2.0

2 files

0.1.2

2 files

0.1.0

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page