Ir al contenido

Iconos y metadatos

La identidad de una app son unas pocas cosas: su nombre, su icono, su versión, quién la publica y, en macOS, su identificador de paquete. Todas se fijan en [tool.pyzed.build] de pyproject.toml, a mano o desde el diálogo Exportar de Pyzed Design, y pyzed build las escribe donde las busca cada sistema.

pyproject.toml
[tool.pyzed.build]
name = "Shop" # Shop.exe, Shop.app, dist/Shop/
version = "1.2.0" # por defecto: la versión de [project]
publisher = "Acme"
identifier = "com.acme.shop" # por defecto: com.<editor>.<nombre>
description = "Punto de venta" # por defecto: la descripción de [project]
copyright = "© 2026 Acme"
Qué Windows macOS Linux
name Shop.exe, el nombre del producto Shop.app, CFBundleDisplayName El ejecutable
version Versión del archivo y del producto (pestaña Detalles) CFBundleShortVersionString y CFBundleVersion -
publisher Nombre de la empresa - -
identifier - CFBundleIdentifier El id de la app de sus ventanas (mira El icono de la ventana)
description Descripción del archivo - -
copyright Copyright legal NSHumanReadableCopyright -

Con PyInstaller, pyzed build escribe un archivo de versión de Windows (build/pyzed/version.txt) y completa el Info.plist del paquete tras compilar; Nuitka recibe los mismos valores como opciones.

Usa como identifier un dominio invertido que te pertenezca. macOS guarda las preferencias y los permisos de privacidad de la app con él, así que no lo cambies entre versiones.

El título de la ventana no va aquí: es el Título del formulario en el diseñador, o title de tu pz.App.

Si tu app muestra su versión o busca actualizaciones, guarda también la versión en tu código, por ejemplo en el __init__.py de tu paquete, y actualízala junto con pyproject.toml:

src/shop/__init__.py
__version__ = "1.2.0"

Dale a icon una imagen cuadrada, idealmente un PNG de 1024 × 1024 píxeles con fondo transparente:

pyproject.toml
[tool.pyzed.build]
icon = "assets/icon.png"

pyzed build crea a partir de ella todos los archivos que piden los sistemas, con el código de imagen del propio Pyzed (sin Pillow, sips ni iconutil), en build/pyzed/:

Archivo Tamaños dentro Para
app-icon.ico 16, 20, 24, 32, 40, 48, 64, 128, 256 px El .exe de Windows: el Explorador, la barra de tareas, Alt+Tab
app-icon.icns de 16 a 1024 px, con tamaños Retina El paquete de macOS: el Finder y el Dock
app-icon.png 256 px El icono de las ventanas de la app (va dentro de la app)

Los tamaños pequeños salen de reducir la imagen grande. Si las versiones de 16 y 32 píxeles se ven borrosas, dibuja tú una versión más simple para ellas (abajo) o usa un diseño con trazos gruesos. El diálogo Exportar muestra una vista previa de cada tamaño.

Un archivo .ico o .icns dado como icon se usa tal cual, para su sistema.

Para controlar cada tamaño, crea los archivos con tu herramienta favorita a partir de un PNG de 1024 × 1024:

from PIL import Image # pip install pillow
Image.open("icon.png").save("icon.ico", sizes=[(s, s) for s in (16, 24, 32, 48, 64, 128, 256)])

Los iconos del .exe y de la .app son los del archivo. Una app empaquetada también da el icono a sus ventanas (la barra de título y la barra de tareas en Windows y Linux): el lanzador fija pz.Window.icon a app-icon.png. macOS siempre muestra en el Dock el icono del paquete.

En tu propio código, cualquier ventana puede tener su icono, una ruta a una imagen o sus bytes:

import pyzed as pz
class Shop(pz.App):
icon = "assets/icon.png"
app_id = "com.acme.shop" # Linux: coincide con el archivo .desktop

En Linux, app_id da nombre a la app ante el escritorio. Wayland toma el icono de la barra de tareas y del dock del archivo .desktop cuyo nombre coincide (com.acme.shop.desktop, mira Linux); X11 usa icon directamente.

Para usar tu propio recurso de versión en lugar del generado (más campos, otros idiomas), captura uno de un .exe existente con pyi-grab_version y pásaselo a PyInstaller:

pyproject.toml
[tool.pyzed.build.pyinstaller]
args = ["--version-file", "assets/version.txt"]

Las rutas de args llegan a PyInstaller sin cambios, y PyInstaller escribe su archivo spec en build/pyzed/: si no encuentra el archivo, usa su ruta absoluta.