Selector de fecha
ui.DatePicker es un campo de texto para una fecha. El botón del calendario (o Alt+↓) abre un Calendario debajo, y el usuario también puede escribir la fecha: se lee con format al pulsar Enter o al salir del campo. Con el foco en el campo, ↑ y ↓ mueven un día y Re Pág/Av Pág un mes, sin abrir nada. on_change recibe un datetime.date (o None si se vacía el campo) en event.value.
ui.DatePicker · Categoría: Fechas y horas · Referencia completa →


pz.container( ui.DatePicker(value="2026-10-22", format="DD/MM/YYYY", on_change=on_change), width=220, height=330, align_y="start")Cuándo usarlo
Sección titulada «Cuándo usarlo»- Para fechas de nacimiento, vencimientos, reservas y cualquier campo de formulario con una fecha.
formatacepta tokens (DD/MM/YYYY,MMM D, YYYY,dddd D MMMM) o un patrón destrftime(%d.%m.%Y). Los nombres de meses y días siguen el idioma de la app.min,maxydisabled_dates(fechas,"weekend"o nombres de días) desactivan días.- Para dos fechas (desde–hasta), usa Selector de rango de fechas.
import pyzed as pzfrom pyzed import ui
import datetime
class Booking(pz.App): def __init__(self): self.day = datetime.date.today()
def view(self): return pz.column([ ui.field("Check-in", ui.DatePicker(value=self.day, format="ddd D MMM YYYY", min=datetime.date.today(), disabled_dates=["sunday"], on_change=lambda e: setattr(self, "day", e.value))), ui.label(f"Booked for {ui.format_date(self.day, 'dddd D MMMM')}"), ], spacing=12, width=320)Variantes
Sección titulada «Variantes»Formato
Sección titulada «Formato»Tokens: YYYY YY, MMMM MMM MM M, DD D, dddd ddd; [texto] se copia tal cual.


"YYYY-MM-DD"Código
ui.DatePicker(value="2026-10-22", on_change=on_change)

"DD/MM/YYYY"Código
ui.DatePicker(value="2026-10-22", format="DD/MM/YYYY", on_change=on_change)

"MMM D, YYYY"Código
ui.DatePicker(value="2026-10-22", format="MMM D, YYYY", on_change=on_change)

"ddd D MMM"Código
ui.DatePicker(value="2026-10-22", format="ddd D MMM", on_change=on_change)Estados
Sección titulada «Estados»

placeholderCódigo
ui.DatePicker(placeholder="Pick a date", on_change=on_change)

invalid=TrueCódigo
ui.DatePicker(value="2026-10-22", invalid=True, on_change=on_change)

disabled=TrueCódigo
ui.DatePicker(value="2026-10-22", disabled=True, on_change=on_change)

Código
ui.DatePicker(value="2026-10-22", on_change=on_change)Ejemplos
Sección titulada «Ejemplos»Formatos
Sección titulada «Formatos»ui.format_date y ui.parse_date usan los mismos tokens que el campo, para tus propias etiquetas.


pz.column([ ui.label(ui.format_date("2026-10-22", "DD/MM/YYYY"), mono=True), ui.label(ui.format_date("2026-10-22", "MMM D, YYYY"), mono=True), ui.label(ui.format_date("2026-10-22", "dddd, D MMMM YYYY"), mono=True), ui.label(ui.format_date("2026-10-22", "[week of] D/M/YY"), mono=True),], spacing=6)Eventos
Sección titulada «Eventos»Selector de fecha tiene 4 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.
Es un pz.Component, así que también lanza on_mount y on_unmount, y sus handlers reciben un pz.Event cuyo value trae el dato.
| Evento | De | El handler recibe | Cuándo |
|---|---|---|---|
on_change |
ui.DatePicker |
(event) |
Recibe event.value: un datetime.date o None. |
on_open |
ui.DatePicker |
(event) |
Se abrió el calendario. |
on_close |
ui.DatePicker |
(event) |
Se cerró el calendario. |
on_dismiss |
pz.popup |
() |
Mensaje o función que se envía con un clic fuera o Escape. |
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.
import datetime
class Booking(pz.App): def __init__(self): self.day = datetime.date(2026, 10, 22)
def changed(self, event): # on_change: event.value is a datetime.date (or None) self.day = event.value
def view(self): return pz.column([ ui.DatePicker(value=self.day, format="DD/MM/YYYY", on_change=self.changed), ui.label(ui.format_date(self.day, "dddd D MMMM") or "No date"), ], spacing=8, width=240)import datetimefrom dataclasses import dataclass
@dataclassclass Picked: day: datetime.date
class Booking(pz.App): day = datetime.date(2026, 10, 22)
def update(self, message): match message: case Picked(day): self.day = day
def view(self): # DatePicker is a pz.Component: its handler gets a pz.Event return ui.DatePicker(value=self.day, on_change=lambda e: Picked(e.value))import datetimefrom dataclasses import dataclass
@dataclass(frozen=True)class State: day: datetime.date = datetime.date(2026, 10, 22)
def view(state, set_state): return pz.column([ ui.DatePicker(value=state.day, format="MMM D, YYYY", on_change=lambda e: set_state(day=e.value)), ui.label(f"Week {state.day.isocalendar().week}" if state.day else "No date"), ], spacing=8, width=240)Consejos
Sección titulada «Consejos»Propiedades y API
Sección titulada «Propiedades y API»ui.DatePicker
Sección titulada «ui.DatePicker»class DatePickerUn componente: un campo de fecha que abre un calendario debajo, en una ventana emergente que ningún panel recorta. Se puede escribir en format (Enter o salir del campo lo lee); tras un clic, ↑/↓ mueven la fecha un día y Re Pág/Av Pág un mes sin abrir nada, Alt+↓ abre el calendario y Escape lo cierra. Ver la página Selector de fecha.
| Propiedad | Por defecto | Descripción |
|---|---|---|
value |
None |
La fecha (datetime.date, texto ISO o None). |
format |
"YYYY-MM-DD" |
Cómo se escribe: "DD/MM/YYYY", "MMM D, YYYY"… (ver format_date). |
placeholder |
"" |
Pista mientras está vacío (por defecto, el formato). |
min |
None |
La primera fecha. |
max |
None |
La última fecha. |
disabled_dates |
() |
Días que no se pueden elegir (como en Calendar). |
first_weekday |
"monday" |
"monday", "sunday" o "saturday". |
week_numbers |
False |
Muestra los números de semana en el calendario. |
clearable |
True |
Muestra una x que lo vacía. |
today_button |
True |
Añade un enlace Hoy al calendario. |
disabled |
False |
Lo atenúa. |
invalid |
False |
Pinta el borde con el color de error. |
Eventos: on_change, on_open, on_close (eventos).
ui.format_date
Sección titulada «ui.format_date»format_date(value, fmt='YYYY-MM-DD', *, language=None)Escribe una fecha con un patrón de marcas: YYYY 2026, YY 26, MMMM octubre, MMM oct, MM 10, M 10, DD 05, D 5, dddd lunes, ddd lun, HH/hh horas, mm minutos, ss segundos, A AM/PM y [texto] tal cual. Un patrón con % es de strftime. Los nombres de meses y días siguen el idioma de pyzed.i18n.
| Propiedad | Por defecto | Descripción |
|---|---|---|
value |
obligatorio | Una fecha, un datetime, texto ISO o None (da ""). |
fmt |
"YYYY-MM-DD" |
El patrón. |
language |
None |
Un idioma para los nombres en lugar del actual. |
ui.parse_date
Sección titulada «ui.parse_date»parse_date(text, fmt='YYYY-MM-DD', *, language=None)Lee una fecha escrita con un patrón de format_date (meses en el idioma actual o en inglés); el ISO YYYY-MM-DD siempre funciona. Devuelve None si el texto no es una fecha.
| Propiedad | Por defecto | Descripción |
|---|---|---|
text |
obligatorio | El texto. |
fmt |
"YYYY-MM-DD" |
El patrón. |
language |
None |
El idioma de los nombres. |
pz.popup
Sección titulada «pz.popup»popup(base, content=None, *, on_dismiss=None, side='bottom', align='start', gap=4.0)Muestra content encima de todo junto a base, como el menú de un desplegable: no lo recortan los paneles donde está base, se pasa al otro lado cuando no cabe y se queda dentro de la ventana. Un clic fuera (y fuera de base) o Escape llama a on_dismiss. Con content=None solo se muestra base. Los selectores de fecha abren su calendario con él.
| Propiedad | Por defecto | Descripción |
|---|---|---|
base |
obligatorio | El widget al que pertenece (un campo, un botón). |
content |
None |
Lo que se abre (un panel, un menú), o None mientras está cerrado. |
side |
"bottom" |
"bottom", "top", "right" o "left" de base. |
align |
"start" |
"start", "center" o "end": cómo se alinea con base. |
gap |
4.0 |
Espacio entre base y el contenido. |
Eventos: on_dismiss (eventos).