Ir al contenido

Marco de ventana

Dibuja el marco completo de una ventana abierta sin decoraciones del sistema (frame = "custom"): una barra de título que mueve la ventana (doble clic la maximiza), los botones de minimizar, maximizar y cerrar con el estilo de una plataforma, menús a la izquierda (ui.Menu) y bordes que cambian el tamaño de la ventana. ui.window_title_bar es la barra sola, ui.window_controls los tres botones y ui.system_platform() dice qué estilo usa este sistema.

ui.window_frame · Categoría: Espacio de trabajo · Referencia completa →

Marco de ventanaMarco de ventana
  • Para apps que quieren una ventana como la de un editor moderno: menús y selectores en la barra de título en lugar del marco del sistema. Mira Marcos de ventana.
  • Sin callbacks, ui.window_title_bar y ui.window_controls solo se muestran: úsalos para previsualizar una ventana con el marco de cada plataforma.
import pyzed as pz
from pyzed import ui
class Notes(pz.App):
title = "Notes"
frame = "custom" # or "macos", "windows", "gnome", "ubuntu", "kde"
def view(self):
return ui.window_frame(
self.editor(),
menus=[ui.Menu("File", [ui.MenuItem("Open…", self.open, keys="ctrl-o"), ui.SEPARATOR,
ui.MenuItem("Quit", self.close)])],
start=[ui.title_button("pyzed", chevron=True)],
end=[ui.button("Run", self.run, icon="play", size="sm")],
)
Marco de ventana: style="windows"Marco de ventana: style="windows"
style="windows"
Código
pz.container(ui.window_title_bar("notes.py", style="windows"), width=420)
Marco de ventana: style="macos"Marco de ventana: style="macos"
style="macos"
Código
pz.container(ui.window_title_bar("notes.py", style="macos"), width=420)
Marco de ventana: style="gnome"Marco de ventana: style="gnome"
style="gnome"
Código
pz.container(ui.window_title_bar("notes.py", style="gnome"), width=420)
Marco de ventana: style="kde"Marco de ventana: style="kde"
style="kde"
Código
pz.container(ui.window_title_bar("notes.py", style="kde"), width=420)
Marco de ventana: style="ubuntu"Marco de ventana: style="ubuntu"
style="ubuntu"
Código
pz.container(ui.window_title_bar("notes.py", style="ubuntu"), width=420)
Marco de ventana: focused=FalseMarco de ventana: focused=False
focused=False
Código
pz.container(ui.window_title_bar("notes.py", style="windows", focused=False), width=420)
Marco de ventana: maximized=TrueMarco de ventana: maximized=True
maximized=True
Código
ui.window_controls("windows", maximized=True)
Marco de ventana: ui.window_controls("macos")Marco de ventana: ui.window_controls("macos")
ui.window_controls("macos")
Código
ui.window_controls("macos")

Marco de ventana tiene 5 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 De El handler recibe Cuándo
on_drag ui.window_title_bar () Se llama al arrastrar la parte vacía de la barra (devuelve Command.drag_window()).
on_minimize ui.window_title_bar, ui.window_controls () Botón de minimizar.
on_maximize ui.window_title_bar, ui.window_controls () Botón de maximizar y doble clic en la barra.
on_close ui.window_title_bar, ui.window_controls () Botón de cerrar.
on_menu ui.window_title_bar () Clic derecho en la barra.

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().

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):
frame = "custom" # Pyzed draws the title bar
def view(self):
bar = ui.window_title_bar(
"notes.py",
on_drag=lambda: self.drag(), # the empty part of the bar
on_minimize=lambda: self.minimize(),
on_maximize=lambda: self.toggle_maximize(), # also a double click on the bar
on_close=lambda: self.close(),
on_menu=lambda: print("window menu"), # right click on the bar
maximized=self.window_maximized,
)
return pz.column([bar, main_view()])
window_frame(
content,
*,
title=None,
menus=None,
menu_button=True,
start=(),
center=None,
end=(),
style=None,
window=None,
height=None,
resize_border=6.0,
resize_edges=True,
bg=None,
theme=None,
)

El marco entero de una ventana abierta con frame="custom": una barra de título que mueve la ventana (doble clic maximiza, clic derecho abre el menú del sistema en Windows), los botones de minimizar, maximizar y cerrar con el estilo de una plataforma, menús a la izquierda y bordes que cambian el tamaño de la ventana.

Propiedad Por defecto Descripción
content obligatorio El contenido de la ventana, bajo la barra de título.
title None Título de la barra. Por defecto el title de la ventana.
menus None Menús a la izquierda de la barra: una lista de ui.Menu.
menu_button True Muestra los menús tras un botón ☰ (False muestra siempre sus nombres).
start () Elementos después de los menús (proyecto, rama…).
center None Tu propio widget en el centro en lugar del título (un buscador, Run y Stop…); la barra sigue arrastrándose a ambos lados.
end () Elementos antes de los botones de ventana.
style None "macos", "windows", "gnome", "ubuntu" o "kde". Por defecto el frame de la ventana, o el del sistema.
window None La ventana sobre la que actúan los botones. Por defecto aquella cuyo view() se está ejecutando.
height None Alto de la barra. Por defecto el de la plataforma.
resize_border 6.0 Ancho en píxeles de los bordes que cambian el tamaño de la ventana.
resize_edges True False deja los bordes de redimensionar a tu cargo (pz.window_edges), para ponerlos encima de menús y diálogos.
bg None Color de fondo ("#rrggbb[aa]", (r, g, b[, a]) o "transparent").
theme None Tema a usar en lugar del actual (pyzed.theme.current()).

Referencia completa →

@dataclass
class Menu(label, items=[])

Un menú de la barra de menús de un marco de ventana: un nombre y sus elementos (ui.MenuItem, ui.SEPARATOR o un texto de cabecera).

Propiedad Por defecto Descripción
label obligatorio El nombre del menú.
items [] Sus elementos: ui.MenuItem, ui.SEPARATOR o un texto de cabecera.

Referencia completa →

window_title_bar(
title=None,
*,
style=None,
start=(),
center=None,
end=(),
on_drag=None,
on_minimize=None,
on_maximize=None,
on_close=None,
on_menu=None,
maximized=False,
focused=True,
width='fill',
height=None,
bg=None,
border=True,
theme=None,
)

La barra de título de una ventana, sola: botones de ventana con el estilo de style (a la izquierda en macOS), elementos start, el título y elementos end. Sin callbacks solo se muestra, que es como Pyzed Design previsualiza un formulario con el marco de cada plataforma.

Propiedad Por defecto Descripción
title None Título (centrado, o a la izquierda en Windows).
style None "macos", "windows", "gnome", "ubuntu" o "kde" (None: el del sistema).
start () Elementos al principio.
center None Widget en el centro en lugar del título; la barra sigue arrastrándose a ambos lados.
end () Elementos al final.
maximized False Muestra el símbolo de restaurar.
focused True False la atenúa como una ventana en segundo plano.
width "fill" Ancho: píxeles, "fill", "shrink" o "fill:N" (proporción).
height None Alto. Por defecto el de la plataforma.
bg None Color de fondo ("#rrggbb[aa]", (r, g, b[, a]) o "transparent").
border True Línea bajo la barra.
theme None Tema a usar en lugar del actual (pyzed.theme.current()).

Eventos: on_drag, on_minimize, on_maximize, on_close, on_menu (eventos).

Referencia completa →

window_controls(
style=None,
*,
on_minimize=None,
on_maximize=None,
on_close=None,
maximized=False,
focused=True,
height=None,
theme=None,
)

Los botones de minimizar, maximizar y cerrar con el estilo de una plataforma. Un botón sin callback se dibuja pero no hace nada.

Propiedad Por defecto Descripción
style None "macos", "windows", "gnome", "ubuntu" o "kde" (None: el del sistema).
maximized False Muestra el símbolo de restaurar.
focused True False los atenúa.
height None Alto.
theme None Tema a usar en lugar del actual (pyzed.theme.current()).

Eventos: on_minimize, on_maximize, on_close (eventos).

Referencia completa →

system_platform()

El estilo de los botones de ventana de este sistema: "macos", "windows", "kde", "ubuntu" o "gnome" (otros escritorios Linux). En WSL es "windows".

Referencia completa →