Cambios sin guardar
“¿Guardar los cambios de nombre antes de cerrar?” con No guardar, Cancelar y Guardar.
ui.unsaved_changes · Categoría: Diálogos · Referencia completa →


ui.dialog_layer(main_view(), ui.unsaved_changes("notes.py", on_save, on_discard, on_cancel))Cuándo usarlo
Sección titulada «Cuándo usarlo»- Al cerrar una pestaña o una ventana con cambios sin guardar.
from pyzed import ui
ui.dialog_layer(main_view(), ui.unsaved_changes("notes.py", on_save, on_discard, on_cancel))Variantes
Sección titulada «Variantes»Opciones
Sección titulada «Opciones»

Código
ui.unsaved_changes("notes.py", on_save, on_discard, on_cancel)

width=360Código
ui.unsaved_changes("report.pzform", on_save, on_discard, on_cancel, width=360)Eventos
Sección titulada «Eventos»Cambios sin guardar tiene 3 eventos propios, en la tabla de abajo. Como todo widget, también tiene los 18 eventos comunes (click, double_click, right_click, mouse_enter, drag, key_down, resize…), que se conectan con .on(...): mira Eventos y Eventos de cada componente.
| Evento | El handler recibe | Cuándo |
|---|---|---|
on_save |
() |
Guardar. |
on_discard |
() |
No guardar. |
on_cancel |
() |
Cancelar. |
El handler recibe es lo que Pyzed le pasa a tu función: () es nada. Cualquier handler también puede ser un mensaje (un valor que no se puede llamar), que va a update().
Manejar los eventos
Sección titulada «Manejar los eventos»Los mismos eventos escritos de tres formas. Imperativa: métodos de la app que cambian self. Declarativa: los handlers producen mensajes y un único update() decide. Funcional: una función pura dibuja un estado inmutable y pide cambios con set_state(...). Mira Imperativo, declarativo y funcional.
class Notes(pz.App): def __init__(self): self.closing = True
def save(self): self.closing = False # write the file, then close
def view(self): dialog = ui.unsaved_changes("notes.py", self.save, lambda: setattr(self, "closing", False), # on_discard lambda: setattr(self, "closing", False)) # on_cancel return ui.dialog_layer(main_view(), dialog if self.closing else None)class Notes(pz.App): closing = True
def update(self, message): match message: case "save" | "discard": self.closing = False case "cancel": self.closing = False
def view(self): dialog = ui.unsaved_changes("notes.py", "save", "discard", "cancel") return ui.dialog_layer(main_view(), dialog if self.closing else None)from dataclasses import dataclass
@dataclass(frozen=True)class State: closing: bool = True saved: bool = False
def view(state, set_state): dialog = ui.unsaved_changes("notes.py", lambda: set_state(saved=True, closing=False), lambda: set_state(closing=False), lambda: set_state(closing=False)) return ui.dialog_layer(main_view(), dialog if state.closing else None)Propiedades y API
Sección titulada «Propiedades y API»ui.unsaved_changes
Sección titulada «ui.unsaved_changes»unsaved_changes(name, on_save, on_discard, on_cancel, *, width=440, theme=None)«¿Guardar los cambios de nombre antes de cerrar?» con No guardar, Cancelar y Guardar.
| Propiedad | Por defecto | Descripción |
|---|---|---|
name |
obligatorio | Nombre del archivo o documento. |
width |
440 |
Ancho: píxeles, "fill", "shrink" o "fill:N" (proporción). |
theme |
None |
Tema a usar en lugar del actual (pyzed.theme.current()). |
Eventos: on_save, on_discard, on_cancel (eventos).