Skip to main content

pysimultanui - PySimultan User Interface

Python library for creating simple user interfaces for PySimultan

img.png

Installation

pysimultanui can be installed using pip:

pip install pysimultanui

Usage

Running the UI

In the command line, run the following command:

pysimultanui_run

To view the help message, run the following command:

pysimultanui_run --help

Adding Toolboxes

PySimultanUI allows you to add toolboxes to the UI. The toolboxes are installed and imported as Python packages.

The package can be included in the UI by creating a new mapping and adding the mapper, method_mapper and view_manager to the mapping:

from pysimultanui import user_manager, run_ui
from my_new_package import mapper, method_mapper, view_manager

mapping = user_manager.mapper_manager.create_mapping(name='FreeCAD Toolbox')
mapping.mapper = mapper
mapping.method_mapper = method_mapper
mapping.view_manager = view_manager

run_ui()

As shown in the example above, a mapping is created with the name 'FreeCAD Toolbox'. The mapper, method_mapper and view_manager of the package are then added to the mapping. The UI is then run using the run_ui() function.

  • The mapper is used to map the class to be used in the UI.
  • The method_mapper is used to map the methods of the class to be used in the UI. (optional)
  • The view_manager is used to create the view of the class in the UI. (optional)

Importing toolboxes in the UI

The toolboxes can be imported in the UI by clicking on the "Menu" -> "Add Toolbox" button in the UI. The toolboxes are imported as Python packages.

img.png

If the package is missing, it will be installed automatically. Then, the mapper, method_mapper and view_manager of the package are imported and added to a new mapping as shown in the previous section.

Example of a toolbox:

import pysimultanui as psui
from PySimultan2.object_mapper import PythonMapper
from PySimultan2.taxonomy_maps import TaxonomyMap, Content

# example class to be mapped:
class ExampleClass:
    def __init__(self, *args, **kwargs):
        self.a = kwargs.get('a', None)
        self.b = kwargs.get('b', None)
        self.c = None

    def add(self):
        self.c = self.a + self.b

    def subtract(self):
        self.c = self.a - self.b

    def multiply(self):
        self.c = self.a * self.b


# create content and taxonomy map:
contents = {}

contents['a'] = Content(text_or_key='a_in_simultan',
                        property_name='a',
                        type=None,
                        unit=None,
                        documentation='Content a')

contents['b'] = Content(text_or_key='b_in_simultan',
                        property_name='b',
                        type=None,
                        unit=None,
                        documentation='Content b')

contents['c'] = Content(text_or_key='c_in_simultan',
                        property_name='c',
                        type=None,
                        unit=None,
                        documentation='Content c')

example_class_map = TaxonomyMap(taxonomy_name='PySimultanUI',
                                taxonomy_key='PySimultanUI',
                                taxonomy_entry_name='ExampleClass',
                                taxonomy_entry_key='ExampleClass',
                                content=[contents['a'],
                                         contents['b'],
                                         contents['c']
                                         ],
                                )

# get the mapper:
mapper = PythonMapper()

# register the class to be mapped:
mapper.register(example_class_map.taxonomy_entry_key,
                ExampleClass,
                taxonomy_map=example_class_map)


# register methods:
cls = mapper.get_mapped_class('ExampleClass')

# get the method mapper:
method_mapper = psui.MethodMapper()

method_mapper.register_method(cls=cls,
                              name='subtract',
                              method=cls.subtract,
                              args=[],
                              kwargs={})

method_mapper.register_method(cls=cls,
                              name='add',
                              method=cls.add,
                              args=[],
                              kwargs={})

method_mapper.register_method(cls=cls,
                              name='multiply',
                              method=cls.multiply,
                              args=[],
                              kwargs={})

if __name__ == '__main__':
    # run the UI if not imported as a package
    psui.run_ui()

Method Mapper

The method mapper is used to map the methods of the class to be used in the UI. The method mapper is optional and can be used to customize the methods of the class in the UI.

Example of a method mapper:

from pysimultanui import MethodMapper

method_mapper = MethodMapper()

def my_first_method(*args, **kwargs):

    user = kwargs.get('user', None)
    data_model = kwargs.get('data_model', None)
    
    
method_mapper.register_method(
    name='My first method',
    method=my_first_method,
    add_data_model_to_kwargs=True,  # add the data model to the kwargs
    add_user_to_kwargs=True,        # add the user to the kwargs
    kwargs={'io_bound': False}      # add additional kwargs
)
  • add_data_model_to_kwargs: If True, the data model is added to the kwargs of the method. It is used to access the data model of the current user.
  • add_user_to_kwargs: If True, the user is added to the kwargs of the method.
  • kwargs: Additional kwargs to be added to the method. io_bound: If True, the method is run as an IO bound method in a separate thread. This is useful for long-running methods, but UI updates are not possible during the execution of the method.

View Manager

The view manager is used to create the view of the class in the UI. The view manager is optional and can be used to customize the view of the class in the UI.

Example of a view manager:

from pysimultanui import ViewManager
from pysimultanui.views.component_detail_base_view import ComponentDetailBaseView

view_manager = ViewManager()

from nicegui import ui

class FeatureDetailView(ComponentDetailBaseView):

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

    @ui.refreshable
    def ui_content(self, *args, **kwargs):
        super().ui_content(*args, **kwargs)
        ui.label('This is a custom view for the class Feature')


# add the view to the view manager. The view is then used to create the view of instances with the taxonomy key '
# feature' in the UI.
view_manager.views['feature'] = FeatureDetailView

Download files

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

Source Distribution

pysimultanui-1.5.9.tar.gz (143.8 kB view details)

Uploaded Source

Built Distribution

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

pysimultanui-1.5.9-py3-none-any.whl (87.5 kB view details)

Uploaded Python 3

File details

Details for the file pysimultanui-1.5.9.tar.gz.

File metadata

  • Download URL: pysimultanui-1.5.9.tar.gz
  • Upload date:
  • Size: 143.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.0 CPython/3.11.9

File hashes

Hashes for pysimultanui-1.5.9.tar.gz
Algorithm Hash digest
SHA256 2df292618508c3989cf8d21437737b3f51f33d1e621109d1e4e486a0f9a4764a
MD5 81dacd8ed8c8e4402235a9e4d4af4b03
BLAKE2b-256 a653e62c52d0fb8bb725903f6af502e79c4df9605441cd03e933fb97579534b4

See more details on using hashes here.

File details

Details for the file pysimultanui-1.5.9-py3-none-any.whl.

File metadata

  • Download URL: pysimultanui-1.5.9-py3-none-any.whl
  • Upload date:
  • Size: 87.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.0 CPython/3.11.9

File hashes

Hashes for pysimultanui-1.5.9-py3-none-any.whl
Algorithm Hash digest
SHA256 fc64f57df7d3b9d651eb09976cbe40b03336180005e8b15b8ccf3934f4a85cc6
MD5 f94ae9938c204ae79a1671e825f03618
BLAKE2b-256 236aad2e3418cc862545c5fe82c1ad9fdb2766903714e2f01c038f7a7f6949ff

See more details on using hashes here.

Release history Release notifications | RSS feed

2.2.1

2 files

2.1.0

2 files

2.0.0

2 files

1.6.5

2 files

1.6.4

2 files

1.6.0

2 files

1.5.10

2 files

This release

1.5.9 This release

2 files

1.5.8

2 files

1.5.7

2 files

1.5.6

2 files

1.5.5

2 files

1.5.4

2 files

1.5.3

2 files

1.5.2

2 files

1.5.1

2 files

1.5.0

2 files

1.4.0

2 files

1.1.1

2 files

1.0.0

2 files

0.3.1

2 files

0.3.0

2 files

0.2.1

2 files

0.2

2 files

0.1

2 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