from textual.containers import Container, Vertical from textual.app import ComposeResult, App from textual.widgets import Static, Header, DataTable class FeedPane(Vertical): def __init__(self, content): super().__init__() self.content = content self.id = "feed-pane" def add(self, e): self.content.append(e) def compose(self): yield Vertical(*self.content, id="left-container") class FeedItem(Static): def __init__(self, content, id): super().__init__() self.content = content self.id = "feed-" + str(id) if id == 0: self.set_styles("color: blue;") def on_mount(self): self.update(self.content) self.on_event class GUI(App): CSS_PATH = "app.css" def __init__(self): super().__init__() self.i = 0 def on_key(self, event): # item = self.query(FeedItem)[self.i] # item.set_styles("color: auto;") if event.key == "j": self.i += 1 elif event.key == "k": self.i -= 1 elif event.key == "r": pane = self.query_one(DataTable) pane.data = {} pane.row_count = 0 pane._line_no = 0 pane._y_offsets = [] pane._require_update_dimensions = True pane.check_idle() elif event.key == "a": pane = self.query_one(DataTable) pane.add_rows([["XXX"]]) else: pass # item = self.query(FeedItem)[self.i] # item.set_styles("color: blue;") def compose(self) -> ComposeResult: yield Header() yield Container( # FeedPane([FeedItem(f"Feed# {number}", number) for number in range(15)]), DataTable(), Vertical( *[Static("Horizontally"), Static("Positioned"), Static("Children"), Static("Here")], id="right-pane", ), id="app-grid", ) def on_mount(self): dt = self.query_one(DataTable) dt.add_column("Feeds", width = 60) # dt.add_rows([[FeedItem(f"Feed# {number}", number)] for number in range(15)]) dt.add_rows([[str(number)] for number in range(15)]) dt.focus() if __name__ == "__main__": app = GUI() app.run()