A modern, frameless desktop core built with PyQt6, designed as a universal foundation for modular desktop applications. It enables developers to easily build, install, and manage standalone sub-windows (plugins) within a single unified workspace.
- 100% Frameless Architecture: Both the main window and all nested MDI sub-windows feature custom native-like title bars (
CustomTitleBar,CustomTitleBarMdi) with complete support for minimize, maximize, and restore operations. - Precision 6px Resize Engine: Uses Qt's native
WA_Hoverevent system for seamless, responsive window border resizing without cursor lag or flickering. - Window Bounds Guard (
WindowBoundsManager): Guarantees that dialogs and sub-windows never overflow beyond screen boundaries or clip beneath the top bar. - Layout & Geometry Persistence: Automatically records and restores exact pixel geometry, coordinates, and display modes (normal, minimized, maximized) across sessions via
.iniconfiguration files.
- Runtime ZIP Installation: Install, activate, or remove plugins directly from
.ziparchives using the built-in Module Manager without restarting the application. - Standardized Interface (
module_interface.py): Clean, declarative schema for plugins to register their windows, menus, and actions. - ServiceManager (IoC Registry): A centralized service container allowing independent modules to register and consume shared services without tight coupling or hard imports.
- Dynamic QSS Theming Engine: Runtime switching between dark and light themes with automatic dynamic path resolution (
@ICON_DIR@,@THEMES_DIR@). - Multi-language Support (
LanguageManager): Centralized translation engine powered by JSON resource files (module in development). - Asynchronous Multi-threaded Startup: Smooth, non-blocking background initialization paired with a responsive Splash Screen.
core/
├── config/ # .ini configurations (windows, modules, themes)
├── logic/ # Core controllers, Module Manager, ServiceManager IoC
├── themes/ # QSS stylesheets and vector SVG icons
├── ui/ # Qt Designer templates (.ui files)
└── windows/ # View components (MainWindow, MDI sub-windows, dialogs)
modules/ # Workspace for external plugins / custom modules
- Python 3.10 or higher
- PyQt6
# Clone the repository
git clone https://github.com/schnidi/modular-mdi-core.git
cd modular-mdi-core
# Create a virtual environment
python -m venv .venv
# Activate the virtual environment
# On Linux / macOS:
source .venv/bin/activate
# On Windows:
.venv\Scripts\activate
# Install dependencies
pip install PyQt6 requests
# Navigate to the core directory and run the application
cd core
python main.pyPlugins for this framework are distributed as standalone .zip archives. To install and use a plugin:
-
Download the Plugin: Download the target plugin as a
.ziparchive. -
Open Module Manager: In the application menu, navigate to Settings (
Nastavenie)$\rightarrow$ Module Manager... (Správca Modulov...). -
Install from Archive: Click the Install from ZIP... (
Inštalovať zo ZIP...) button and select the downloaded.zipfile. -
Activate the Plugin: Once extracted and validated by the core, check the checkbox next to the module name and click Apply Changes (
Použiť zmeny).
The plugin’s windows, menu entries, and background services will be immediately loaded into the workspace without requiring an application restart.
This project is licensed under the GNU Affero General Public License v3.0 (GNU AGPLv3).
See the LICENSE file for more details.