status_table.py 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. # -*- coding: utf-8 -*-
  2. """
  3. Key-Value-Tabelle fuer Statusanzeigen.
  4. """
  5. from textual.widget import Widget
  6. from textual.app import RenderResult
  7. from rich.table import Table
  8. class StatusTable(Widget):
  9. """
  10. Formatierte Key-Value-Tabelle.
  11. Zeigt Daten als zweispaltige Tabelle an,
  12. ideal fuer Systemmetriken und Konfigurationswerte.
  13. """
  14. DEFAULT_CSS = """
  15. StatusTable {
  16. height: auto;
  17. margin: 0 1;
  18. }
  19. """
  20. def __init__(self, title: str = "", **kwargs) -> None:
  21. super().__init__(**kwargs)
  22. self._title = title
  23. self._rows: list[tuple[str, str]] = []
  24. def update_data(self, rows: list[tuple[str, str]]) -> None:
  25. """Aktualisiert die angezeigten Daten."""
  26. self._rows = rows
  27. self.refresh()
  28. def render(self) -> RenderResult:
  29. """Rendert die Tabelle."""
  30. table = Table(
  31. show_header=False,
  32. show_edge=False,
  33. pad_edge=False,
  34. expand=True,
  35. title=self._title if self._title else None,
  36. title_style="bold",
  37. )
  38. table.add_column("Key", style="bold cyan", ratio=1, no_wrap=True)
  39. table.add_column("Value", ratio=2)
  40. for key, value in self._rows:
  41. table.add_row(key, value)
  42. return table