Files
textual/docs/examples/guide/compound/byte01.py
Will McGugan 864931e94b Compound docs (#1952)
* compound example

* update bit switch

* prevent

* no css

* compound widget example

* more diagrams

* more diagrams

* diagrams

* words

* words

* remove sender

* removed priority post

* timer fix

* test fixes

* drop async version of post_message

* extended docs

* fix no app

* Added control properties

* changelog

* changelog

* changelog

* fix for stopping timers

* changelog

* docs update

* last byte example

* new section

* update of byte03

* updae to docs

* Added compound examples

* Rewording

* Use set sender

* don't need this

* hyphens

* Update docs/guide/widgets.md

Co-authored-by: Dave Pearson <davep@davep.org>

* Update docs/guide/widgets.md

Co-authored-by: Dave Pearson <davep@davep.org>

* Update docs/guide/widgets.md

Co-authored-by: Dave Pearson <davep@davep.org>

* Update docs/guide/widgets.md

Co-authored-by: Dave Pearson <davep@davep.org>

* Update docs/guide/widgets.md

Co-authored-by: Dave Pearson <davep@davep.org>

* Update docs/guide/widgets.md

Co-authored-by: Dave Pearson <davep@davep.org>

* Update docs/guide/widgets.md

Co-authored-by: Rodrigo Girão Serrão <5621605+rodrigogiraoserrao@users.noreply.github.com>

* Update docs/guide/widgets.md

Co-authored-by: Rodrigo Girão Serrão <5621605+rodrigogiraoserrao@users.noreply.github.com>

* Update docs/guide/widgets.md

Co-authored-by: Rodrigo Girão Serrão <5621605+rodrigogiraoserrao@users.noreply.github.com>

* Update docs/guide/widgets.md

Co-authored-by: Rodrigo Girão Serrão <5621605+rodrigogiraoserrao@users.noreply.github.com>

* parenthesis

* stack diagram

---------

Co-authored-by: Dave Pearson <davep@davep.org>
Co-authored-by: Rodrigo Girão Serrão <5621605+rodrigogiraoserrao@users.noreply.github.com>
2023-03-06 16:56:24 +00:00

82 lines
1.6 KiB
Python

from __future__ import annotations
from textual.app import App, ComposeResult
from textual.containers import Container
from textual.widget import Widget
from textual.widgets import Input, Label, Switch
class BitSwitch(Widget):
"""A Switch with a numeric label above it."""
DEFAULT_CSS = """
BitSwitch {
layout: vertical;
width: auto;
height: auto;
}
BitSwitch > Label {
text-align: center;
width: 1fr;
}
"""
def __init__(self, bit: int) -> None:
self.bit = bit
super().__init__()
def compose(self) -> ComposeResult:
yield Label(str(self.bit))
yield Switch()
class ByteInput(Widget):
"""A compound widget with 8 switches."""
DEFAULT_CSS = """
ByteInput {
width: auto;
height: auto;
border: blank;
layout: horizontal;
}
ByteInput:focus-within {
border: heavy $secondary;
}
"""
def compose(self) -> ComposeResult:
for bit in reversed(range(8)):
yield BitSwitch(bit)
class ByteEditor(Widget):
DEFAULT_CSS = """
ByteEditor > Container {
height: 1fr;
align: center middle;
}
ByteEditor > Container.top {
background: $boost;
}
ByteEditor Input {
width: 16;
}
"""
def compose(self) -> ComposeResult:
with Container(classes="top"):
yield Input(placeholder="byte")
with Container():
yield ByteInput()
class ByteInputApp(App):
def compose(self) -> ComposeResult:
yield ByteEditor()
if __name__ == "__main__":
app = ByteInputApp()
app.run()