mirror of
https://github.com/Textualize/textual.git
synced 2025-10-17 02:38:12 +03:00
fix for refreshing layout
This commit is contained in:
@@ -1,4 +1,3 @@
|
||||
from textual import events
|
||||
from textual.app import App
|
||||
from textual.widgets import Placeholder
|
||||
|
||||
@@ -6,7 +5,7 @@ from textual.widgets import Placeholder
|
||||
class SimpleApp(App):
|
||||
"""Demonstrates smooth animation"""
|
||||
|
||||
async def on_mount(self, event: events.Mount) -> None:
|
||||
async def on_mount(self) -> None:
|
||||
"""Build layout here."""
|
||||
|
||||
await self.view.dock(Placeholder(), edge="left", size=40)
|
||||
|
||||
@@ -135,9 +135,10 @@ class App(MessagePump):
|
||||
if self.log_file and verbosity <= self.log_verbosity:
|
||||
output = f" ".join(str(arg) for arg in args)
|
||||
if kwargs:
|
||||
output += " " + " ".join(
|
||||
key_values = " ".join(
|
||||
f"{key}={value}" for key, value in kwargs.items()
|
||||
)
|
||||
output = " ".join((output, key_values))
|
||||
self.log_file.write(output + "\n")
|
||||
self.log_file.flush()
|
||||
except Exception:
|
||||
@@ -301,11 +302,6 @@ class App(MessagePump):
|
||||
if self.log_file is not None:
|
||||
self.log_file.close()
|
||||
|
||||
async def call_later(self, callback: Callable, *args, **kwargs) -> None:
|
||||
await self.post_message(
|
||||
events.Callback(self, partial(callback, *args, **kwargs))
|
||||
)
|
||||
|
||||
def register(self, child: MessagePump, parent: MessagePump) -> bool:
|
||||
if child not in self.children:
|
||||
self.children.add(child)
|
||||
|
||||
@@ -7,6 +7,7 @@ from abc import ABC, abstractmethod
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
from . import events
|
||||
from . import log
|
||||
from ._types import MessageTarget
|
||||
|
||||
if TYPE_CHECKING:
|
||||
|
||||
@@ -77,7 +77,7 @@ class Message:
|
||||
"""
|
||||
return False
|
||||
|
||||
def prevent_default(self, prevent: bool = True) -> None:
|
||||
def prevent_default(self, prevent: bool = True) -> Message:
|
||||
"""Suppress the default action.
|
||||
|
||||
Args:
|
||||
@@ -85,14 +85,16 @@ class Message:
|
||||
or False if the default actions should be performed. Defaults to True.
|
||||
"""
|
||||
self._no_default_action = prevent
|
||||
return self
|
||||
|
||||
def stop(self, stop: bool = True) -> None:
|
||||
def stop(self, stop: bool = True) -> Message:
|
||||
"""Stop propagation of the message to parent.
|
||||
|
||||
Args:
|
||||
stop (bool, optional): The stop flag. Defaults to True.
|
||||
"""
|
||||
self._stop_propagation = stop
|
||||
return self
|
||||
|
||||
async def wait(self) -> None:
|
||||
"""Wait for the message to be processed."""
|
||||
|
||||
@@ -3,6 +3,7 @@ from __future__ import annotations
|
||||
import asyncio
|
||||
from asyncio import CancelledError
|
||||
from asyncio import Queue, QueueEmpty, Task
|
||||
from functools import partial
|
||||
from typing import TYPE_CHECKING, Awaitable, Iterable, Callable
|
||||
from weakref import WeakSet
|
||||
|
||||
@@ -144,10 +145,20 @@ class MessagePump:
|
||||
self._child_tasks.add(asyncio.get_event_loop().create_task(timer.run()))
|
||||
return timer
|
||||
|
||||
async def call_later(self, callback: Callable, *args, **kwargs) -> None:
|
||||
"""Run a callback after processing all messages and refreshing the screen.
|
||||
|
||||
Args:
|
||||
callback (Callable): A callable.
|
||||
"""
|
||||
await self.post_message(
|
||||
events.Callback(self, partial(callback, *args, **kwargs))
|
||||
)
|
||||
|
||||
def close_messages_no_wait(self) -> None:
|
||||
self._message_queue.put_nowait(None)
|
||||
|
||||
async def close_messages(self, wait: bool = True) -> None:
|
||||
async def close_messages(self) -> None:
|
||||
"""Close message queue, and optionally wait for queue to finish processing."""
|
||||
if self._closed:
|
||||
return
|
||||
|
||||
@@ -129,7 +129,6 @@ class Reactive(Generic[ReactiveType]):
|
||||
except AttributeError:
|
||||
continue
|
||||
value = await invoke(compute_method)
|
||||
# value = await compute_method()
|
||||
setattr(obj, compute, value)
|
||||
|
||||
|
||||
|
||||
@@ -106,13 +106,14 @@ class View(Widget):
|
||||
assert isinstance(widget, Widget)
|
||||
|
||||
display_update = self.layout.update_widget(self.console, widget)
|
||||
# self.log("UPDATE", widget, display_update)
|
||||
if display_update is not None:
|
||||
self.app.display(display_update)
|
||||
|
||||
async def handle_layout(self, message: messages.Layout) -> None:
|
||||
await self.refresh_layout()
|
||||
if self.is_root_view:
|
||||
message.stop()
|
||||
await self.refresh_layout()
|
||||
self.app.refresh()
|
||||
|
||||
async def mount(self, *anon_widgets: Widget, **widgets: Widget) -> None:
|
||||
@@ -142,9 +143,7 @@ class View(Widget):
|
||||
return
|
||||
|
||||
hidden, shown, resized = self.layout.reflow(self, Size(*self.console.size))
|
||||
|
||||
assert self.layout.map is not None
|
||||
# self.virtual_size = self.layout.map.virtual_size
|
||||
|
||||
for widget in hidden:
|
||||
widget.post_message_no_wait(events.Hide(self))
|
||||
|
||||
@@ -63,4 +63,5 @@ class Button(Widget):
|
||||
return ButtonRenderable(self.label, style=self.button_style)
|
||||
|
||||
async def on_click(self, event: events.Click) -> None:
|
||||
event.prevent_default().stop()
|
||||
await self.emit(ButtonPressed(self))
|
||||
|
||||
Reference in New Issue
Block a user