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)

Metadata

Release files for pylon-desktop 0.2.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pylon-desktop 0.2.2
File Size Uploaded
pylon_desktop-0.2.2.tar.gz 12.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for pylon-desktop 0.2.2
File Interpreter ABI Platform
pylon_desktop-0.2.2-py3-none-any.whl Python 3 none any Details

Total release size: 25.7 kB

Release files / pylon_desktop-0.2.2.tar.gz

Download URL pylon_desktop-0.2.2.tar.gz
Size 12.8 kB
Tags Source
SHA-256 checksum
How to use checksums
47e8192a1e32ba49f6d92c66370a2ba311a5b512009e41e76800e0a13d8b35ec
BLAKE2b-256 checksum
How to use checksums
f1229645821cd29fec220ca5329fa84413e38a49e8ed4635342d01a59288edd4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.8.3 CPython/3.12.2 Windows/10

Release files / pylon_desktop-0.2.2-py3-none-any.whl

Download URL pylon_desktop-0.2.2-py3-none-any.whl
Size 12.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
6c33d7217612ded672906892925f7626c535dced616f4312cc8de5ff82144ffb
BLAKE2b-256 checksum
How to use checksums
c218cffc1da808df1bcab17686eeb4637d89f4b31e75dc2b3222416c1b8487bd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.8.3 CPython/3.12.2 Windows/10

Release history Release notifications | RSS feed

This release

0.2.2 This release

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.2

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page