jaredks / rumps

Ridiculously Uncomplicated macOS Python Statusbar apps
BSD 3-Clause "New" or "Revised" License
3.06k stars 177 forks source link

Feature: Segmented Controls #201

Open SKaplanOfficial opened 1 year ago

SKaplanOfficial commented 1 year ago

Summary:

Adds supports for segmented control menu items, an example which uses them, and supporting documentation. Also updates the documentation to include docs for slider and separator menu items.

Segmented controls are sets of buttons that can be switched on and off, optionally allowing multiple selections at a time. This PR adds a SegmentedMenuItem class alongside a segmented decorator which allows users to easily define segmented controls with a list of strings as the button titles. Users can also specify whether to support multiselection, whether the selection should be momentary (i.e. act as a one-off button) or not, the style of the button set, and a callback function.

Example:

import rumps

@rumps.segmented(segments=["10"])
def button_press(sender):
    print(sender.selection)

app = rumps.App('Segments', quit_button=rumps.MenuItem('Quit', key='q'))
app.menu = [
    rumps.SegmentedMenuItem(["1", "2", "3"], multiselect=True, style='bordered', callback=lambda item: print("Current selection:", item.selection)),
    rumps.SegmentedMenuItem(["4", "5", "6"], style='rectangular', callback=lambda item: print("Selected", item.selection[0])),
    rumps.SegmentedMenuItem(["7", "8", "9"], momentary=True, style='separated', callback=lambda item: print("Clicked", item.selection[0])),
]
app.run()

Image:

SegmentedControl
SKaplanOfficial commented 1 year ago

@daredoes Another one, when you get a chance 🙂