63 lines
1.7 KiB
Python
63 lines
1.7 KiB
Python
from textual import events
|
|
from textual.app import App
|
|
from textual.containers import Container
|
|
from textual.widgets import Static
|
|
|
|
|
|
class ClickableColorBlock(Static):
|
|
background_toggled = False
|
|
raw_background = ""
|
|
|
|
def on_mount(self):
|
|
self.styles.border = ("heavy", "white")
|
|
self.raw_background = self.styles.background
|
|
|
|
def on_click(self, event: events.Click):
|
|
event.prevent_default()
|
|
|
|
self.background_toggled = not self.background_toggled
|
|
self.styles.background = (
|
|
str(self.render()) if self.background_toggled else self.raw_background
|
|
)
|
|
|
|
self.log("block background changed!")
|
|
|
|
|
|
class DisplayApp(App):
|
|
CSS_PATH = "css/events.css"
|
|
background_toggled = False
|
|
|
|
def compose(self):
|
|
yield Container(
|
|
ClickableColorBlock("red", classes="block"),
|
|
ClickableColorBlock("blue", classes="block"),
|
|
ClickableColorBlock("green", classes="block"),
|
|
ClickableColorBlock("cyan", classes="block"),
|
|
id="display-container",
|
|
)
|
|
|
|
def on_click(self):
|
|
self.background_toggled = not self.background_toggled
|
|
target = self.query_one("#display-container")
|
|
blocks = target.query(".block")
|
|
background = None
|
|
border = None
|
|
|
|
if self.background_toggled:
|
|
background = "white"
|
|
border = ("heavy", "black")
|
|
else:
|
|
background = "grey"
|
|
border = ("heavy", "white")
|
|
|
|
target.styles.background = background
|
|
for block in blocks:
|
|
block.styles.border = border
|
|
|
|
self.log("container background changed!")
|
|
|
|
|
|
if __name__ == '__main__':
|
|
app = DisplayApp()
|
|
app.run()
|