mirror of
https://github.com/Textualize/textual.git
synced 2025-10-17 02:38:12 +03:00
tabbed content widget (#2059)
* 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>
This commit is contained in:
57
docs/examples/widgets/tabbed_content.py
Normal file
57
docs/examples/widgets/tabbed_content.py
Normal file
@@ -0,0 +1,57 @@
|
||||
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()
|
||||
Reference in New Issue
Block a user