tmp: перекрывающее окно textual при backup

This commit is contained in:
Sergei Erjemin 2025-06-08 23:42:38 +03:00
parent 3d930836f5
commit 505c5f3421

View File

@ -3,10 +3,13 @@
import logging import logging
from logging.handlers import MemoryHandler from logging.handlers import MemoryHandler
from typing import Dict, Any, Optional from typing import Dict, Any, Optional, List, Tuple
from textual.app import App, ComposeResult from textual.app import App, ComposeResult
from textual.containers import Vertical, Horizontal from textual.containers import Vertical, Horizontal, Container
from textual.widgets import Button, Header, Footer, Static, Log from textual.css.query import DOMQuery
from textual.reactive import reactive
from textual.screen import Screen
from textual.widgets import Button, Header, Footer, Static, Log, Label, ListView, ListItem, OptionList
# --- Настройки и инициирование логирования модуля --- # --- Настройки и инициирование логирования модуля ---
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@ -44,6 +47,24 @@ class MainMenu(Static):
id="menu", id="menu",
) )
# Новый простой экран для Backup
class SimpleBackupScreen(Screen):
"""
Простой экран для демонстрации перехода при выборе Backup.
"""
BINDINGS = [
("escape", "pop_screen", "Назад"), # Позволяет вернуться на главный экран по Escape
]
def compose(self) -> ComposeResult:
yield Header(name="Экран Бэкапа") # Заголовок для нового экрана
yield Label("Привет, мир! Это экран для бэкапа.", classes="greeting-label")
yield Footer()
def on_mount(self) -> None:
logger.info(f"Экран '{self.id}' (SimpleBackupScreen) смонтирован.")
class PGanecApp(App): class PGanecApp(App):
CSS = """ CSS = """
Screen { Screen {
@ -65,9 +86,9 @@ class PGanecApp(App):
margin: 0; padding: 0; margin: 0; padding: 0;
} }
Button#backup, Button#restore { color: orange; border: round orange; } Button#backup, Button#restore, Button#quit { color: orange; border: round orange; }
Button#copy, Button#quit { color: grey; border: round orange; } Button#copy { color: grey; border: round orange; }
Button:focus { border: heavy green; } Button:focus { border: heavy green; }
@ -79,6 +100,15 @@ class PGanecApp(App):
background: 15%; background: 15%;
} }
Log#app_log_viewer:focus { height: 50%; border-top: solid green; background: 45%; } Log#app_log_viewer:focus { height: 50%; border-top: solid green; background: 45%; }
/* Стили для нового экрана */
SimpleBackupScreen .greeting-label {
width: 100%;
text-align: center;
padding: 2 0; /* Немного отступов сверху и снизу */
text-style: bold;
}
Footer { dock: bottom; height: 1; } Footer { dock: bottom; height: 1; }
Header { dock: top; height: 1; } Header { dock: top; height: 1; }
@ -91,7 +121,7 @@ class PGanecApp(App):
("q", "quit", "Quit"), ("q", "quit", "Quit"),
("right", "focus_next"), ("down", "focus_next"), # Стрелочки для навигации (вниз/вправо -- вперед) ("right", "focus_next"), ("down", "focus_next"), # Стрелочки для навигации (вниз/вправо -- вперед)
("left", "focus_previous"), ("up", "focus_previous"), # Стрелочки для навигации (вверх/влево -- назад) ("left", "focus_previous"), ("up", "focus_previous"), # Стрелочки для навигации (вверх/влево -- назад)
("enter", "activate", "Activate"), ("enter", "activate"),
] ]
def __init__(self, def __init__(self,
@ -124,10 +154,12 @@ class PGanecApp(App):
async def on_button_pressed(self, event: Button.Pressed) -> None: async def on_button_pressed(self, event: Button.Pressed) -> None:
button_id = event.button.id button_id = event.button.id
if button_id == "backup": if button_id == "backup":
await self.push_screen(BackupScreen()) # пока заглушка await self.push_screen(SimpleBackupScreen())
elif button_id == "restore": elif button_id == "restore":
await self.push_screen(RestoreScreen()) # пока заглушка logger.info("Действие 'Restore' пока не реализовано с новым экраном.")
self.app.bell() # Сигнал, что действие не выполнено
elif button_id == "copy": elif button_id == "copy":
logger.warning("Copy action is currently a placeholder for quit.")
await self.action_quit() await self.action_quit()
elif button_id == "quit": elif button_id == "quit":
await self.action_quit() await self.action_quit()
@ -168,8 +200,8 @@ class PGanecApp(App):
self.early_log_handler = None # Очищаем ссылку self.early_log_handler = None # Очищаем ссылку
# --- Конец переноса и сброса --- # --- Конец переноса и сброса ---
logger.debug("TUI: DEBUG сообщение для проверки")
logger.info("TUI-логгер инициализирован") logger.info("TUI-логгер инициализирован")
logger.debug("TUI: DEBUG сообщение для проверки")
logger.warning("TUI: WARNING для проверки") logger.warning("TUI: WARNING для проверки")
logger.error("TUI: ERROR тоже для проверки") logger.error("TUI: ERROR тоже для проверки")