Skip to main content

TrayApp

based on Moses Palmér's pystray library!

Simple library for creating system tray applications.

PyPI version MIT License

Usage

with TrayApp(name='Test',  # the little tooltip, seen when hovering over the icon
             icon_path=Path('../path/to/the/image.png'),  # anything that can be transformed into a PIL.Image
             icon_size=(256, 256,)  # size to create the thumbnail
             ) as app:

    # create the menu shown when icon gets right-clicked here

    app.add_button(text='hello world',
                   action=print,  # method to call when clicked
                   args=('hello world',),  # arguments, optional, in a tuple
                   # determines wheter the function gets called when the icon is left-clicked
                   # optional, default to False, can be obviously only used once per app
                   default=True  
                   )

    app.add_separator()  # well...

    with app.add_submenu(text='SubMenu') as submenu:  # submenues can be created by using a context manager within

        with submenu.add_submenu(text='first subsub') as first_sub_sub:  # and recursivly as well
            first_sub_sub.add_button(text='1.1', action=print, args=('1.1',))
            first_sub_sub.add_button(text='1.2', action=print, args=('1.2',))

        with submenu.add_submenu(text='second susub') as second_sub_sub:
            second_sub_sub.add_button(text='2.1', action=print, args=('2.1',))
            second_sub_sub.add_button(text='2.2', action=print, args=('2.2',))

        # any add_button(), add_separator(), add_submenu(), add_radiobuttongroup() can be used here
        # just remember to add them to the right submenu        

    app.add_separator()

    # a RadioButtonGroup is a group of buttons which can be used to select something
    # trying it out might be the best way to understand it
    with app.add_radiobuttongroup() as rbg:  # used with a contextmanager as well
        rbg.add(text='hello')
        rbg.add(text='world', selected=True)  # selected determines the item which is selected on creation

RadioButtonGroup example:

items = (
        'hello',
        'world',
        'this',
        'is',
        'just',
        'an',
        'example',
    )

# you NEED to provide the group itself since just state would be by value
def print_selected(rbg): print(items[rbg.state])

selected_item = 3  # saved outside and updated when the app is closed

with TrayApp(name='Test',
             icon_path=Path(r'C:\Users\robin\Documents\Private\Python\trayPy\data\test.png'),
             icon_size=(256, 256,)) as app:

    with app.add_radiobuttongroup() as rbg:
        for index, item in enumerate(items):
            rbg.add(text=item, selected=index == selected_item)

    # to check if it works
    app.add_button(text='print the selected', action=print_selected, args=(rbg,), default=False)

License

MIT, see the LICENSE file

Release files for trayapp 0.1.3

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

Source distribution (sdist)

Source distribution for trayapp 0.1.3
File Size Uploaded
trayapp-0.1.3.tar.gz 5.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for trayapp 0.1.3
File Interpreter ABI Platform
trayapp-0.1.3-py3-none-any.whl Python 3 none any Details

Total release size: 13.9 kB

Release files / trayapp-0.1.3.tar.gz

Download URL trayapp-0.1.3.tar.gz
Size 5.7 kB
Tags Source
SHA-256 checksum
How to use checksums
8d0d18be1e0f2f9a7e350557d2fbebd05bc25007f9fb8f4c3c092d9393501b6a
BLAKE2b-256 checksum
How to use checksums
2b13507a746bd56cf9b3df4b65ca7a82f632c772c730784562f70edbf7e88a78
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/46.1.3 requests-toolbelt/0.9.1 tqdm/4.45.0 CPython/3.8.2

Release files / trayapp-0.1.3-py3-none-any.whl

Download URL trayapp-0.1.3-py3-none-any.whl
Size 8.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
61a6109c97904ce6c439bbc0b7a758e367e307de93032ceac76912dd29548725
BLAKE2b-256 checksum
How to use checksums
7d63780975f465b4654f7beebf45c21b028fbeb49c48967ea8cbe04cde7ab0d0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/46.1.3 requests-toolbelt/0.9.1 tqdm/4.45.0 CPython/3.8.2

Release history Release notifications | RSS feed

0.1.4

2 release files

This release

0.1.3 This release

2 release files

0.1.2

2 release files

0.1.1

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