A simple spinbox widget for Textual
Project description
A Textual Spinbox widget
Demo a Textual spinbox
Simply run from the repo with uv
uvx --from git+https://github.com/friscorose/textual-spinbox spinbox_demo
now you can scroll wheel up or down, drag up or down and click the up or down arrows to change the value in the spinbox. A simple ctrl+c to quit.
NB: This widget is also available from PyPI if you want to use pip/pipx to manage your python packages.
Use uv to build an app
Build a silly app with a custom Textual spinbox widget using uv.
uv init sillyapp
then
cd sillyapp
edit hello.py to contain the following source
"""A silly demo of the SpinBox widget"""
from calendar import month_name
from textual.app import App, ComposeResult
from textual.reactive import reactive
from textual.widgets import Button, Label
from textual_spinbox import SpinBox
class Statement( Label ):
"""Make label reactive"""
silly = reactive( "...a silly statement.", recompose=True )
def compose(self) -> ComposeResult:
yield Label( self.silly )
class SpinboxApp(App):
"""The main demo app"""
DEFAULT_CSS = """
SpinBox {
width: 13;
}
"""
months = list(month_name)[1:]
things = ['albatross', 'boomerang', 'cat', 'dodo', 'ewe', 'flotilla', 'geriatric', 'hopscotch', 'ice flow', 'jalopy', 'Kobayashi Maru', 'lava', 'mycelium', 'narwhal', 'oil tanker', 'pod', 'quaaltagh', 'rat', 'snail', 'tiptoe', 'ukulele', 'verb', 'wheeriemigo', 'xanthippe', 'yill', 'zymurgy']
def compose(self) -> ComposeResult:
yield SpinBox( id="pennies" )
yield SpinBox( range(1,32), 21, id="date" )
yield SpinBox( self.months, id="month" )
yield SpinBox( self.things, "snail", id="thing" )
yield Button( "Make", variant="primary", id="make" )
yield Statement()
def on_button_pressed(self, event: Button.Pressed):
"""What to do when the button is clicked"""
if event.button.id == "make":
pennies = self.query_one("#pennies").value
date = self.query_one("#date").value
month = self.query_one("#month").value
thing = self.query_one("#thing").value
self.query_one("Statement").silly = f"""\
...my bank statement change by {pennies} cents on {month}/{date} \n\
Reason: compulsory {thing} race gambling."""
def exec_main():
"""Allow call by script handler in pyproject"""
app = SpinboxApp()
app.run()
if __name__ == "__main__":
exec_main()
make Textual available to the app
uv add textual
then make the textual-spinbox widget available
uv add "textual-spinbox @ git+https://github.com/friscorose/textual-spinbox"
now run it
uv run hello.py
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file textual_spinbox-0.8.0.tar.gz.
File metadata
- Download URL: textual_spinbox-0.8.0.tar.gz
- Upload date:
- Size: 9.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.5.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0ef8293d307b76cc15246c7853ea3a71cacfe2ddaa41e7e95d846ec5a7c88f3d
|
|
| MD5 |
58acaa2549d2e60f6f15c55a5b411809
|
|
| BLAKE2b-256 |
1bdbf562c768394f7c773b541060bcda3071c9c359b92e8baa76228ca3861e6b
|
File details
Details for the file textual_spinbox-0.8.0-py3-none-any.whl.
File metadata
- Download URL: textual_spinbox-0.8.0-py3-none-any.whl
- Upload date:
- Size: 5.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.5.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0ffcc8a546af88b5886d16e79e581173b06644c2b4dedd358ea2d13cecd47d87
|
|
| MD5 |
407242f817328bb9c4fd269378d30c60
|
|
| BLAKE2b-256 |
a5c1271c5974ea06debce44aaf4af5af5fa299ac7b0e23c6d3ac500ecada17dc
|