Lightweight framework based on PySide6 to quickly build modern desktop applications, with integrated resource, theme, and reusable component management.
Project description
๐ EzQt App
EzQt App is a lightweight Python framework based on PySide6 to quickly build modern desktop applications, with integrated resource, theme, translation, and reusable component management. Built on a hexagonal architecture for clean separation of concerns.
๐ฆ Installation
pip install ezqt-app
Or from source:
git clone https://github.com/neuraaak/ezqt-app.git
cd ezqt-app && pip install .
๐ Quick Start
import sys
from ezqt_app.app import EzQt_App
from ezqt_app.services.application.app_service import AppService
# Initialize and run the framework
app_service = AppService()
app_service.initialize()
# Create main window
window = EzQt_App(themeFileName="main_theme.qss")
# Add navigation menus
home_page = window.addMenu("Home", "๐ ")
settings_page = window.addMenu("Settings", "โ๏ธ")
# Show application
window.show()
app_service.exec()
๐ฏ Key Features
- โ PySide6 Compatible: Full support for the latest PySide6 versions
- โ Hexagonal Architecture: Clean domain/services/widgets separation
- โ Full Type Hints: Complete typing support for IDEs and linters
- โ Dynamic Themes: Light/dark themes with integrated toggle via QSS
- โ Global Translation: Multi-language support (EN, FR, ES, DE)
- โ
Automatic Translation: Non-blocking multi-provider system (Google, MyMemory, LibreTranslate) with daemon-thread HTTP, in-flight deduplication, and progressive
.ts/.qmfile population - โ CLI Tools: Project initialization, template generation, and management
- โ Template System: Basic and advanced project scaffolding
- โ Standardized Logging: Consistent message formatting across all components
- โ Comprehensive Tests: Complete test suite (~426 tests)
๐ Documentation
Full documentation is available online: neuraaak.github.io/ezqt-app
- ๐ Getting Started โ Installation and first steps
- ๐ฏ API Reference โ Complete module reference (auto-generated)
- ๐จ QSS Style Guide โ QSS customization and best practices
- ๐ก Examples โ Usage examples and demonstrations
- ๐ฅ๏ธ CLI โ Command-line interface guide
- ๐งช Testing โ Test suite documentation
- ๐ง Development โ Environment setup and contribution
๐๏ธ Architecture
EzQt App follows a hexagonal architecture with three main layers:
src/ezqt_app/
โโโ domain/ # Contracts, ports, models, errors (no dependencies)
โ โโโ ports/ # Abstract interfaces (AppPort, ConfigPort, etc.)
โ โโโ models/ # Domain models
โ โโโ errors/ # Domain exceptions
โโโ services/ # Adapters implementing domain ports
โ โโโ application/ # App lifecycle (AppService, InitService)
โ โโโ config/ # Configuration (ConfigService, SettingsService)
โ โโโ translation/ # i18n (TranslationService, AutoTranslator)
โ โโโ ui/ # UI coordination (ThemeService, MenuService)
โโโ widgets/ # PySide6 presentation layer
โ โโโ core/ # Header, Menu, PageContainer
โ โโโ extended/ # SettingWidgets and advanced components
โโโ shared/ # Cross-cutting utilities
โโโ cli/ # Command-line interface
โโโ app.py # Main EzQt_App entry point
๐งฉ Available Components
๐ง Application Services (ezqt_app.services)
| Service | Description |
|---|---|
| AppService | Application lifecycle management |
| InitService | Startup initialization and bootstrap |
| ConfigService | Application configuration management |
| SettingsService | User settings persistence |
| RuntimeStateService | Runtime state tracking |
| TranslationService | Language management and switching |
| ThemeService | Theme loading and switching |
| MenuService | Navigation menu management |
| WindowService | Main window orchestration |
๐ Translation System (ezqt_app.services.translation)
| Component | Description |
|---|---|
| TranslationManager | Central translation registry, .ts/.qm lifecycle |
| EzTranslator | Qt interceptor โ feeds unknown strings to auto-translation |
| AutoTranslator | Non-blocking multi-provider translation (daemon threads) |
| StringCollector | Automatic string discovery for translation |
๐จ Widgets (ezqt_app.widgets)
| Widget | Description |
|---|---|
| EzQt_App | Main application window with modern UI |
| Header | Top navigation bar with title and controls |
| Menu | Sidebar navigation menu |
| PageContainer | Content area manager |
| SettingWidgets | Settings UI components with validation |
๐งช Testing
Comprehensive test suite with 426+ test cases covering services, widgets, and integration scenarios.
# Install dev dependencies
pip install -e ".[dev]"
# Run all tests
pytest tests/
# Run by marker
pytest tests/ -m unit
pytest tests/ -m integration
# With coverage
pytest tests/ --cov=src/ezqt_app --cov-report=html
# Using CLI
ezqt test --unit
ezqt test --coverage
See the Testing Guide for complete details.
๐ฅ๏ธ CLI Commands
Project Management
# Initialize new project (assets, QRC, resources)
ezqt init [--force] [--verbose] [--no-main]
# Create project from template
ezqt create --template basic --name my_app
ezqt create --template advanced --name my_app
# Show project information
ezqt info
Development Tools
# Convert .ts translation files to .qm
ezqt convert [--verbose]
ezqt mkqm [--verbose]
# Run tests
ezqt test [--unit] [--integration] [--coverage]
# Serve documentation
ezqt docs [--serve] [--port <port>]
๐ Translation System
# Use Qt's standard translation call โ EzTranslator intercepts automatically
from PySide6.QtCore import QCoreApplication
text = QCoreApplication.translate("EzQt_App", "Hello World")
# Change active language (triggers LanguageChange on all widgets)
from ezqt_app.services.translation import get_translation_manager
get_translation_manager().load_language("Franรงais")
# Enable auto-translation: unknown strings are translated via external providers
# and progressively saved to .ts files, then compiled to .qm
window.enable_auto_translation(True)
Supported languages: English, Franรงais, Espaรฑol, Deutsch
Translation providers: Google Translate, MyMemory, LibreTranslate (tried in order, daemon threads โ UI never blocked)
Auto-populate: .ts files are updated at runtime; .qm files are recompiled via pyside6-lrelease on each language load. Identity entries are written for the source language so en.ts is always populated.
๐ ๏ธ Development Setup
# Clone and install in development mode
git clone https://github.com/neuraaak/ezqt-app.git
cd ezqt-app
pip install -e ".[dev]"
# Install pre-commit hooks
pre-commit install
# Verify CLI installation
ezqt --version
ezqt info
See the Development Guide for detailed instructions.
๐ฆ Dependencies
Runtime
- PySide6>=6.7.3 โ Qt for Python framework
- requests>=2.32.4 โ HTTP requests (translation providers)
- click>=8.2.1 โ CLI framework
- PyYAML>=6.0 โ YAML configuration
- ruamel.yaml==0.18.6 โ Advanced YAML processing
Development
- pytest>=7.0.0 โ Testing framework
- pytest-cov>=4.0.0 โ Coverage reporting
- ruff>=0.1.0 โ Linting and formatting
- mypy / pyright โ Type checking
๐ License
MIT License โ See LICENSE file for details.
๐ Links
- Repository: https://github.com/neuraaak/ezqt-app
- Issues: GitHub Issues
- Documentation: neuraaak.github.io/ezqt-app
- PyPI: pypi.org/project/ezqt-app
- Changelog: CHANGELOG.md
EzQt App โ Modern PySide6 application framework with hexagonal architecture. ๐
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ezqt_app-5.2.5.tar.gz.
File metadata
- Download URL: ezqt_app-5.2.5.tar.gz
- Upload date:
- Size: 752.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
656e38c634fdb21391d96776bb8877ae0bbd7a34057d7dad512799db8c83ab47
|
|
| MD5 |
87d095eee60ea6c673c77310b0904bda
|
|
| BLAKE2b-256 |
13d7caa2e628410d7c618b892ac6570aa0ab00f94156e769b4735979df153c6f
|
File details
Details for the file ezqt_app-5.2.5-py3-none-any.whl.
File metadata
- Download URL: ezqt_app-5.2.5-py3-none-any.whl
- Upload date:
- Size: 1.0 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fe7c00fd8a0d7b0b703e21453107616c770b2057503f20dc15fd0485a5cfb7db
|
|
| MD5 |
6ce7cfa11fcdc1047d0371b7b5ab70ea
|
|
| BLAKE2b-256 |
c57321daf5320cc26ff5a7539ce1006aeae58fad19b38eb774ea2ab0d8921310
|