mirror of
https://github.com/Textualize/textual.git
synced 2025-10-17 02:38:12 +03:00
basic example
This commit is contained in:
33
examples/basic.css
Normal file
33
examples/basic.css
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
App > DockView {
|
||||||
|
layout: dock;
|
||||||
|
docks: side=left/1 header=top footer=bottom;
|
||||||
|
layers: base panels;
|
||||||
|
}
|
||||||
|
|
||||||
|
#sidebar {
|
||||||
|
text: bold #09312e on #3caea3;
|
||||||
|
dock-group: side;
|
||||||
|
width: 30;
|
||||||
|
height: 1fr;
|
||||||
|
layer: panels;
|
||||||
|
border-right: outer #09312e;
|
||||||
|
}
|
||||||
|
|
||||||
|
#header {
|
||||||
|
text: on #173f5f;
|
||||||
|
dock-group: header;
|
||||||
|
height: 3;
|
||||||
|
border: hkey white;
|
||||||
|
}
|
||||||
|
|
||||||
|
#footer {
|
||||||
|
dock-group: header;
|
||||||
|
height: 3;
|
||||||
|
border-top: hkey #0f2b41;
|
||||||
|
text: #3a3009 on #f6d55c;
|
||||||
|
}
|
||||||
|
|
||||||
|
#content {
|
||||||
|
dock-group: header;
|
||||||
|
text: on #20639b;
|
||||||
|
}
|
||||||
@@ -5,62 +5,10 @@ from textual.widget import Widget
|
|||||||
class BasicApp(App):
|
class BasicApp(App):
|
||||||
"""A basic app demonstrating CSS"""
|
"""A basic app demonstrating CSS"""
|
||||||
|
|
||||||
css = """
|
def on_mount(self) -> None:
|
||||||
|
|
||||||
App > DockView {
|
|
||||||
layout: dock;
|
|
||||||
docks: side=left/1 header=top footer=bottom;
|
|
||||||
layers: base panels;
|
|
||||||
}
|
|
||||||
|
|
||||||
#sidebar {
|
|
||||||
text: bold #09312e on #3CAEA3;
|
|
||||||
dock-group: side;
|
|
||||||
width: 30;
|
|
||||||
height: 1fr;
|
|
||||||
layer: panels;
|
|
||||||
border-right: vkey #09312e;
|
|
||||||
display: block;
|
|
||||||
offset-x: -15
|
|
||||||
}
|
|
||||||
|
|
||||||
#sidebar.-active {
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
|
|
||||||
#header {
|
|
||||||
text: on #173f5f;
|
|
||||||
dock-group: header;
|
|
||||||
height: 3;
|
|
||||||
border: hkey white;
|
|
||||||
}
|
|
||||||
|
|
||||||
#footer {
|
|
||||||
dock-group: header;
|
|
||||||
|
|
||||||
/* border-top: hkey #0f2b41; */
|
|
||||||
text: #3a3009 on #f6d55c;
|
|
||||||
/*padding: 2;*/
|
|
||||||
border: heavy red;
|
|
||||||
margin: 2;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
#content {
|
|
||||||
dock-group: header;
|
|
||||||
text: on #20639B;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
"""
|
|
||||||
|
|
||||||
async def on_load(self) -> None:
|
|
||||||
await self.bind("t", "toggle('#sidebar', '-active')")
|
|
||||||
|
|
||||||
async def on_mount(self) -> None:
|
|
||||||
"""Build layout here."""
|
"""Build layout here."""
|
||||||
|
|
||||||
await self.view.mount(
|
self.view.mount(
|
||||||
header=Widget(),
|
header=Widget(),
|
||||||
content=Widget(),
|
content=Widget(),
|
||||||
footer=Widget(),
|
footer=Widget(),
|
||||||
@@ -68,4 +16,4 @@ class BasicApp(App):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
BasicApp.run(log="textual.log")
|
BasicApp.run(css_file="basic.css")
|
||||||
|
|||||||
@@ -172,7 +172,7 @@ class App(DOMNode):
|
|||||||
except Exception:
|
except Exception:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
async def bind(
|
def bind(
|
||||||
self,
|
self,
|
||||||
keys: str,
|
keys: str,
|
||||||
action: str,
|
action: str,
|
||||||
@@ -354,9 +354,7 @@ class App(DOMNode):
|
|||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
|
|
||||||
async def mount(
|
def mount(self, parent: DOMNode, *anon_widgets: Widget, **widgets: Widget) -> None:
|
||||||
self, parent: DOMNode, *anon_widgets: Widget, **widgets: Widget
|
|
||||||
) -> None:
|
|
||||||
"""Mount widget(s) so they may receive events.
|
"""Mount widget(s) so they may receive events.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
@@ -377,13 +375,8 @@ class App(DOMNode):
|
|||||||
self._register(parent, widget)
|
self._register(parent, widget)
|
||||||
apply_stylesheet(widget)
|
apply_stylesheet(widget)
|
||||||
|
|
||||||
# await widget.post_message(mount_event)
|
|
||||||
# await mount_event.wait()
|
|
||||||
for _widget_id, widget in name_widgets:
|
for _widget_id, widget in name_widgets:
|
||||||
widget.post_message_no_wait(events.Mount(sender=parent))
|
widget.post_message_no_wait(events.Mount(sender=parent))
|
||||||
# await event.wait()
|
|
||||||
# for widget, _ in widget_events:
|
|
||||||
# apply_stylesheet(widget)
|
|
||||||
|
|
||||||
def is_mounted(self, widget: Widget) -> bool:
|
def is_mounted(self, widget: Widget) -> bool:
|
||||||
return widget in self.registry
|
return widget in self.registry
|
||||||
@@ -474,7 +467,7 @@ class App(DOMNode):
|
|||||||
# If the event has been forwarded it may have bubbled up back to the App
|
# If the event has been forwarded it may have bubbled up back to the App
|
||||||
if isinstance(event, events.Mount):
|
if isinstance(event, events.Mount):
|
||||||
view = DockView()
|
view = DockView()
|
||||||
await self.mount(self, view)
|
self.mount(self, view)
|
||||||
await self.push_view(view)
|
await self.push_view(view)
|
||||||
await super().on_event(event)
|
await super().on_event(event)
|
||||||
|
|
||||||
|
|||||||
@@ -170,7 +170,7 @@ class Layout(ABC):
|
|||||||
async def mount_all(self, view: "View") -> None:
|
async def mount_all(self, view: "View") -> None:
|
||||||
widgets = list(self.get_widgets(view))
|
widgets = list(self.get_widgets(view))
|
||||||
if widgets:
|
if widgets:
|
||||||
await view.mount(*widgets)
|
view.mount(*widgets)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def map(self) -> LayoutMap | None:
|
def map(self) -> LayoutMap | None:
|
||||||
|
|||||||
@@ -138,8 +138,8 @@ class View(Widget):
|
|||||||
message.stop()
|
message.stop()
|
||||||
self.app.refresh()
|
self.app.refresh()
|
||||||
|
|
||||||
async def mount(self, *anon_widgets: Widget, **widgets: Widget) -> None:
|
def mount(self, *anon_widgets: Widget, **widgets: Widget) -> None:
|
||||||
await self.app.mount(self, *anon_widgets, **widgets)
|
self.app.mount(self, *anon_widgets, **widgets)
|
||||||
self.refresh()
|
self.refresh()
|
||||||
|
|
||||||
async def refresh_layout(self) -> None:
|
async def refresh_layout(self) -> None:
|
||||||
|
|||||||
Reference in New Issue
Block a user