feat: 新增技能扩展N15一章相关示例源码
This commit is contained in:
62
code/newsletter/N15/04_events.py
Normal file
62
code/newsletter/N15/04_events.py
Normal file
@@ -0,0 +1,62 @@
|
||||
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()
|
||||
Reference in New Issue
Block a user