Una librería Python para crear interfaces gráficas que funcionen con GTK o Qt, dejando al usuario elegir el backend que prefiera.
Este proyecto demuestra cómo construir una aplicación GUI portable que puede ejecutarse con PyQt6 o GTK 4 (PyGObject), seleccionando el backend en tiempo de ejecución. Ideal para desarrolladores que quieren ofrecer flexibilidad sin atarse a un solo framework.
- ✅ Soporte para PyQt6 y GTK 4
- 🔌 Selección dinámica del backend GUI
- 🧩 Dependencias opcionales: instala solo lo que necesitas
- ⚡ Alto rendimiento con
uv
y gestión de entornos conhatch
- 🧪 Pruebas con
pytest
, cobertura, linting (ruff
), y type checking (mypy
) - 🛠 Automatización con
Makefile
- 📦 Empaquetado moderno con
pyproject.toml
Antes de instalar las dependencias de Python, asegúrate de tener instaladas las bibliotecas nativas del sistema:
sudo apt install libgtk-4-dev libgirepository1.0-dev
sudo dnf install gtk4-devel gobject-introspection-devel
Arch Linux
sudo pacman -S gtk4 gobject-introspection
macOS
brew install gtk4 gobject-introspection
⚠️ Sin estas dependencias, PyGObject no funcionará aunque se instale con pip.
git clone https://github.com/GabrielVargas/py-gui-everywhere.git
cd py-gui-everywhere
# Configurar entorno de desarrollo
make dev
# Instalar dependencias para Qt
make install-qt
# Instalar dependencias para GTK
make install-gtk
# Instalar ambos (opcional)
make install-all
make run
make run-qt
make run-gtk
"💡 También puedes usar la variable de entorno:"
GUI_BACKEND=qt make run GUI_BACKEND=gtk make run
# Ejecutar pruebas
make test
# Con cobertura
make cov
# Linting (ruff)
make lint
# Arreglar estilo automáticamente
make fix
# Verificación de tipos (mypy)
make type-check
# Todo en uno
make check
Estructura del proyecto
py-gui-everywhere/
├── src/
│ └── py_gui_everywhere/
│ ├── __about__.py # Versión
│ ├── demo.py # Punto de entrada
│ └── gui/
│ ├── backend.py # Carga dinámica de GUI
│ ├── qt_ui.py # Interfaz con Qt
│ └── gtk_ui.py # Interfaz con GTK 4
├── tests/ # Pruebas unitarias
├── pyproject.toml # Configuración del proyecto
├── Makefile # Automatización
└── README.md
Python >= 3.9
hatch – Gestión de entornos y empaquetado
uv – Instalador rápido de dependencias
PyQt6 – GUI con Qt
PyGObject – GUI con GTK 4
ruff – Linting ultra rápido
mypy – Type checking
pytest – Pruebas
MIT © Gabriel Vargas
¡Bienvenidos contribuciones! Abre un issue o PR si encuentras un bug, mejoras de código, o quieres añadir soporte para más GUIs (como Tkinter, DearPyGui, etc.).
- Nombre: Gabriel Vargas
- Email: vmgabriel96@gmail.com
- GitHub: @vmgabriel