PySimpleGUI hace interfaces gráficas describiendo la ventana como una lista de filas. Por debajo usa tkinter, pero el código se queda en la mitad. Antes del ejemplo, conviene saber qué ha pasado con su licencia.
También te puede interesar
Su licencia, en cuatro fechas
| Fecha | Qué pasó |
|---|---|
| 2018 | nace como software libre |
| Febrero de 2024 | la versión 5 pasa a ser comercial: hacía falta una clave para usarla |
| Febrero de 2025 | la empresa que lo mantenía anuncia su cierre |
| Abril de 2026 | la versión 6 vuelve a ser libre, con licencia LGPL3 |
Lo cuenta su autor en la página del proyecto en PyPI. Mientras tanto, la comunidad mantuvo una bifurcación libre, FreeSimpleGUI, que se usa igual cambiando el import. Si tu proyecto se quedó con alguna de esas dos, no tienes por qué cambiar.
Instalarlo
pip install PySimpleGUI
Esto instala la versión 6, la libre. La versión anterior de esta página añadía pip install tk, y eso hay que quitarlo: ese paquete no es tkinter, sino un proyecto distinto que se llama igual. PySimpleGUI necesita tkinter, que en Linux se instala con sudo apt install python3-tk.
Una ventana que saluda
import PySimpleGUI as sg
layout = [
[sg.Text("Escribe tu nombre y pulsa el botón", key="-SALUDO-")],
[sg.Input(key="-NOMBRE-", size=(30, 1))],
[sg.Button("Saludar"), sg.Button("Salir")],
]
ventana = sg.Window("Hola, PySimpleGUI", layout)
while True:
evento, valores = ventana.read()
if evento in (sg.WIN_CLOSED, "Salir"):
break
if evento == "Saludar":
texto = valores["-NOMBRE-"].strip() or "mundo"
ventana["-SALUDO-"].update(f"¡Hola, {texto}!")
ventana.close()
Las tres ideas
La ventana es una lista de filas, y cada fila, una lista de controles. El código se parece a la ventana que vas a ver, y eso es lo que hace a PySimpleGUI tan fácil de leer.
El bucle es tuyo. ventana.read() espera hasta que pase algo y devuelve qué ha pasado —el texto del botón pulsado, o sg.WIN_CLOSED si se cerró la ventana— y los valores de todos los campos. Tú decides qué hacer y vuelves a esperar. Comparado con tkinter, donde cada botón tiene su función, aquí todo está en un mismo sitio.
Las claves identifican los controles. key="-NOMBRE-" sirve para leer el campo en valores["-NOMBRE-"] y para cambiarlo con ventana["-SALUDO-"].update(...). Los guiones alrededor son una convención del proyecto para distinguir claves de textos; no son obligatorios.
sg.WIN_CLOSED. Si el usuario cierra la ventana con la X y tu bucle no lo mira, read() sigue devolviendo eventos vacíos sin parar y el programa se queda en un bucle infinito consumiendo procesador.Más información en inglés: Create an interface with PySimpleGUI.
Todo el código se ejecutó con Python 3.14 en un contenedor limpio antes de publicar esta página; las salidas están copiadas de esa ejecución.