* tabbed content widget * TabbedContent widget and docs * missing docs * fix active * doc fix * test fix * additional test * test for render_str * docstring * changelog * doc update * changelog * fix bad optimization * Update docs/widgets/tabbed_content.md Co-authored-by: Dave Pearson <davep@davep.org> * fix for empty initial * docstrings * Update src/textual/widgets/_content_switcher.py Co-authored-by: Dave Pearson <davep@davep.org> * docstring * remove log * permit nested tabs * renamed TabsCleared to Cleared * added tests, fix types on click * tests * fix broken test * fix for nested tabs --------- Co-authored-by: Dave Pearson <davep@davep.org>
57 lines
1.4 KiB
Python
57 lines
1.4 KiB
Python
from textual.app import App, ComposeResult
|
|
from textual.widgets import Footer, Label, Markdown, TabbedContent, TabPane
|
|
|
|
LETO = """
|
|
# Duke Leto I Atreides
|
|
|
|
Head of House Atreides.
|
|
"""
|
|
|
|
JESSICA = """
|
|
# Lady Jessica
|
|
|
|
Bene Gesserit and concubine of Leto, and mother of Paul and Alia.
|
|
"""
|
|
|
|
PAUL = """
|
|
# Paul Atreides
|
|
|
|
Son of Leto and Jessica.
|
|
"""
|
|
|
|
|
|
class TabbedApp(App):
|
|
"""An example of tabbed content."""
|
|
|
|
BINDINGS = [
|
|
("l", "show_tab('leto')", "Leto"),
|
|
("j", "show_tab('jessica')", "Jessica"),
|
|
("p", "show_tab('paul')", "Paul"),
|
|
]
|
|
|
|
def compose(self) -> ComposeResult:
|
|
"""Compose app with tabbed content."""
|
|
# Footer to show keys
|
|
yield Footer()
|
|
|
|
# Add the TabbedContent widget
|
|
with TabbedContent(initial="jessica"):
|
|
with TabPane("Leto", id="leto"): # First tab
|
|
yield Markdown(LETO) # Tab content
|
|
with TabPane("Jessica", id="jessica"):
|
|
yield Markdown(JESSICA)
|
|
with TabbedContent("Paul", "Alia"):
|
|
yield TabPane("Paul", Label("First child"))
|
|
yield TabPane("Alia", Label("Second child"))
|
|
|
|
with TabPane("Paul", id="paul"):
|
|
yield Markdown(PAUL)
|
|
|
|
def action_show_tab(self, tab: str) -> None:
|
|
"""Switch to a new tab."""
|
|
self.get_child_by_type(TabbedContent).active = tab
|
|
|
|
|
|
if __name__ == "__main__":
|
|
app = TabbedApp()
|
|
app.run()
|