Thank you for your interest in contributing! This document explains how to get involved.
- Fork the repository on GitHub
- Clone your fork locally:
git clone https://github.com/YOUR_USERNAME/vhdl-tool.git cd vhdl-tool - Set up a virtual environment:
python -m venv venv source venv/bin/activate # Linux/macOS venv\Scripts\activate # Windows pip install -r requirements.txt
- Run the app to verify everything works:
python main.py
- Open an issue on GitHub
- Include your OS, Python version, and PyQt6 version
- Include the full traceback if the app crashed
- Describe the steps to reproduce
- Open an issue labelled
enhancement - Describe the use case — especially for classroom use
The i18n system makes adding a new language straightforward:
- Copy
i18n/en.pytoi18n/xx.py(wherexxis the language code) - Translate all string values (keep the keys unchanged)
- Add the language to
_SUPPORTEDand_LANG_NAMESini18n/__init__.py - Add
actionLangXxtoui/main_window.uiand wire it inmain_window.py
- Create a branch:
git checkout -b feature/my-feature - Make your changes
- Verify the app starts and the affected feature works
- Run a quick syntax check:
python -m py_compile **/*.py - Commit with a clear message:
git commit -m 'Add French translation' - Push:
git push origin feature/my-feature - Open a Pull Request — describe what changed and why
- Python 3.10+ type hints where practical
- PyQt6 — no PyQt5 compatibility concerns
- UI structure in
.uifiles (Qt Designer format), logic in Python - Translatable strings via
tr("key")— never hardcode user-visible text - No external dependencies beyond PyQt6
See README.md for the full directory structure. Key principles:
widgets/— PyQt6 widgets, no business logicgenerators/— pure Python, no Qt imports, no side effectssimulation/— pure Python FSM engine, no Qt importsi18n/— no Qt at module level (lazy imports only)project/— JSON serialisation, Qt only for QSettings