{"id":31792831,"url":"https://github.com/parhamoyan/cutewindow","last_synced_at":"2025-10-10T17:27:59.684Z","repository":{"id":142953082,"uuid":"613128789","full_name":"parhamoyan/cutewindow","owner":"parhamoyan","description":"Cross-platform frameless window based on Python and Qt","archived":false,"fork":false,"pushed_at":"2025-09-24T13:23:35.000Z","size":14282,"stargazers_count":15,"open_issues_count":1,"forks_count":4,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-09-24T15:16:49.602Z","etag":null,"topics":["cross-platform","frameless-window","pyside6","qt"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/parhamoyan.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-03-13T00:07:32.000Z","updated_at":"2025-09-24T13:23:39.000Z","dependencies_parsed_at":"2025-09-24T15:16:58.392Z","dependency_job_id":null,"html_url":"https://github.com/parhamoyan/cutewindow","commit_stats":{"total_commits":64,"total_committers":2,"mean_commits":32.0,"dds":0.015625,"last_synced_commit":"7ca2af160df8b9ded30de6e22fb3d5d2a8cd1f68"},"previous_names":["parhamoyan/cutewindow"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/parhamoyan/cutewindow","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/parhamoyan%2Fcutewindow","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/parhamoyan%2Fcutewindow/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/parhamoyan%2Fcutewindow/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/parhamoyan%2Fcutewindow/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/parhamoyan","download_url":"https://codeload.github.com/parhamoyan/cutewindow/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/parhamoyan%2Fcutewindow/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279004828,"owners_count":26083784,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-10T02:00:06.843Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cross-platform","frameless-window","pyside6","qt"],"created_at":"2025-10-10T17:27:58.666Z","updated_at":"2025-10-10T17:27:59.677Z","avatar_url":"https://github.com/parhamoyan.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# CuteWindow\n\n[![PyPI version](https://badge.fury.io/py/pyside6-cutewindow.svg)](https://badge.fury.io/py/pyside6-cutewindow)\n[![Python Support](https://img.shields.io/pypi/pyversions/pyside6-cutewindow.svg)](https://pypi.org/project/pyside6-cutewindow/)\n[![License](https://img.shields.io/github/license/parhamoyan/cutewindow.svg)](https://github.com/parhamoyan/cutewindow/blob/main/LICENSE)\n[![Code Style](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)\n[![CI](https://github.com/parhamoyan/cutewindow/workflows/CI/badge.svg)](https://github.com/parhamoyan/cutewindow/actions/workflows/ci.yml)\n[![Documentation](https://readthedocs.org/projects/cutewindow/badge/?version=latest)](https://cutewindow.readthedocs.io/en/latest/)\n\n**CuteWindow** is a modern, cross-platform window library based on PySide6 that provides enhanced control and customization with native window controls and behaviors across different platforms. Create beautiful, customizable applications with ease!\n\n## ✨ Features\n\n- 🖥️ **Cross-platform**: Works seamlessly on Windows and macOS\n- 🎨 **Enhanced control**: Customizable window appearance with flexible styling options\n- 🎛️ **Native controls**: Platform-specific window buttons and behaviors\n- 🎯 **Customizable**: Easy to customize title bar appearance and functionality\n- 📱 **High-DPI support**: Automatic scaling for high-resolution displays\n- ✨ **Native animations**: Smooth window animations and shadows\n- 🪟 **Win11 snap layout**: Windows 11 snap layout support\n- 🔧 **Easy integration**: Drop-in replacement for standard Qt windows\n\n## 🚀 Quick Start\n\n### Installation\n\nInstall CuteWindow with a single command:\n\n```bash\npip install pyside6-cutewindow\n```\n\n### Basic Usage\n\nCreating a customizable window is as simple as:\n\n```python\nimport sys\nfrom PySide6.QtWidgets import QApplication\nfrom cutewindow import CuteWindow\n\nif __name__ == \"__main__\":\n    app = QApplication(sys.argv)\n    window = CuteWindow()\n    window.setWindowTitle(\"My Customizable App\")\n    window.resize(800, 600)\n    window.show()\n    sys.exit(app.exec())\n```\n\n### Window Types\n\nCuteWindow provides three main window types for different use cases:\n\n#### CuteWindow (Basic)\n```python\nfrom cutewindow import CuteWindow\n\nwindow = CuteWindow()\nwindow.setWindowTitle(\"Basic Window\")\nwindow.show()\n```\n\n#### CuteMainWindow (Advanced)\n```python\nfrom cutewindow import CuteMainWindow\nfrom PySide6.QtWidgets import QMenuBar, QMenu, QAction\n\nwindow = CuteMainWindow()\nwindow.setWindowTitle(\"Main Window\")\n\n# Add menu bar\nmenubar = QMenuBar()\nfile_menu = QMenu(\"File\", menubar)\nexit_action = QAction(\"Exit\", menubar)\nfile_menu.addAction(exit_action)\nmenubar.addMenu(file_menu)\nwindow.setMenuBar(menubar)\n\nwindow.show()\n```\n\n#### CuteDialog (Dialogs)\n```python\nfrom cutewindow import CuteDialog\nfrom PySide6.QtWidgets import QPushButton, QVBoxLayout, QWidget\n\ndialog = CuteDialog()\ndialog.setWindowTitle(\"Dialog\")\ndialog.setModal(True)\n\n# Add content\nlayout = QVBoxLayout()\nbutton = QPushButton(\"Close\")\nbutton.clicked.connect(dialog.close)\nlayout.addWidget(button)\n\ncontainer = QWidget()\ncontainer.setLayout(layout)\ndialog.setCentralWidget(container)\n\ndialog.exec()\n```\n\n## 🎨 Customization\n\n### Styling the Title Bar\n\n```python\nfrom cutewindow import CuteWindow\n\nwindow = CuteWindow()\n\n# Style the title bar using CSS\nwindow.setStyleSheet(\"\"\"\n    #TitleBar {\n        background-color: #2b2b2b;\n        border-bottom: 1px solid #3a3a3a;\n    }\n\"\"\")\n\nwindow.show()\n```\n\n### Custom Title Bar Widget\n\n```python\nfrom PySide6.QtWidgets import QLabel, QPushButton, QHBoxLayout, QWidget\nfrom cutewindow import CuteWindow, TitleBar\n\nclass CustomTitleBar(TitleBar):\n    def __init__(self, parent=None):\n        super().__init__(parent)\n\n        # Create custom layout\n        layout = QHBoxLayout(self)\n        layout.setContentsMargins(10, 0, 10, 0)\n\n        # Add title label\n        title_label = QLabel(\"Custom Title\")\n        title_label.setStyleSheet(\"color: white; font-weight: bold;\")\n        layout.addWidget(title_label)\n\n        layout.addStretch()\n\n        # Add custom buttons\n        help_btn = QPushButton(\"?\")\n        help_btn.setFixedSize(30, 20)\n        layout.addWidget(help_btn)\n\nwindow = CuteWindow()\nwindow.setTitleBar(CustomTitleBar(window))\nwindow.show()\n```\n\n## 🖼️ Screenshots\n\n### CuteWindow on macOS\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"assets/mac_qute_window.gif\" alt=\"CuteWindow on macOS\" width=\"600\"\u003e\n\u003c/p\u003e\n\n### CuteWindow on Windows\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"assets/win32_qute_window.gif\" alt=\"CuteWindow on Windows\" width=\"600\"\u003e\n\u003c/p\u003e\n\n## 📋 Requirements\n\n- **Python**: 3.9 or higher\n- **Poetry**: Dependency management (recommended)\n- **PySide6**: Qt6 bindings for Python\n- **Platform-specific dependencies**:\n  - **macOS**: pyobjc-framework-Cocoa, pyobjc-framework-Quartz\n  - **Windows**: pywin32\n\n## 🔧 Installation\n\n### From PyPI (Recommended)\n\n```bash\npip install pyside6-cutewindow\n```\n\n### From Source with Poetry (Recommended for Development)\n\n```bash\n# Clone the repository\ngit clone https://github.com/parhamoyan/cutewindow.git\ncd cutewindow\n\n# Install Poetry (if not already installed)\ncurl -sSL https://install.python-poetry.org | python3 -\n\n# Install dependencies\npoetry install\n\n# Set up development environment\npoetry install --with dev\n\n# Set up pre-commit hooks\npoetry run python scripts/setup_precommit.py\n```\n\n### From Source with pip\n\n```bash\ngit clone https://github.com/parhamoyan/cutewindow.git\ncd cutewindow\npip install -e .\n```\n\n### Development Installation with pip\n\n```bash\ngit clone https://github.com/parhamoyan/cutewindow.git\ncd cutewindow\npip install -e \".[dev]\"\npre-commit install\n```\n\n## 📚 Documentation\n\nComprehensive documentation is available at [https://cutewindow.readthedocs.io](https://cutewindow.readthedocs.io)\n\n- [Getting Started](https://cutewindow.readthedocs.io/en/latest/getting_started.html)\n- [Customization](https://cutewindow.readthedocs.io/en/latest/customization.html)\n- [API Reference](https://cutewindow.readthedocs.io/en/latest/api/index.html)\n- [Examples](https://cutewindow.readthedocs.io/en/latest/examples/index.html)\n\n## 🎯 Examples\n\nCheck out the `examples/` directory for more comprehensive examples:\n\n- `demo.py` - Basic usage example\n- `demo_custom_title_bar.py` - Custom title bar implementation\n- `demo_login_dialog.py` - Login dialog example\n- `demo_title_bar_style.py` - Title bar styling example\n\nRun an example:\n\n```bash\npython examples/demo.py\n```\n\n## 🏗️ Architecture\n\nCuteWindow uses a clean, modular architecture:\n\n```\ncutewindow/\n├── __init__.py                 # Main package interface\n├── base.py                     # Abstract base classes\n├── Icon.py                     # Enhanced icon handling\n├── platforms/                  # Platform-specific implementations\n│   ├── __init__.py            # Platform detection\n│   ├── mac/                   # macOS implementation\n│   │   ├── CuteWindow.py\n│   │   ├── CuteMainWindow.py\n│   │   ├── CuteDialog.py\n│   │   ├── TitleBar.py\n│   │   └── utils.py\n│   └── windows/               # Windows implementation\n│       ├── CuteWindow.py\n│       ├── CuteMainWindow.py\n│       ├── CuteDialog.py\n│       ├── TitleBar.py\n│       ├── utils.py\n│       ├── native_event.py\n│       └── c_structures.py\n└── examples/                   # Usage examples\n```\n\n### Platform-Specific Features\n\n#### Windows\n- Native window shadows via DWM\n- Windows 11 snap layout support\n- Smooth window animations\n- Native window buttons\n- Aero Snap functionality\n\n#### macOS\n- Native traffic lights (red, yellow, green buttons)\n- Smooth window animations\n- Full-screen support\n- Native window shadows\n- Mission Control integration\n\n## 🔄 CI/CD\n\nCuteWindow uses GitHub Actions for continuous integration and deployment:\n\n- **CI Pipeline**: Runs on every push and pull request to ensure code quality\n  - Tests across multiple Python versions (3.8-3.12) and platforms (Windows, macOS)\n  - Code formatting checks (Black, isort)\n  - Linting (flake8)\n  - Type checking (mypy)\n  - Security scanning (safety, bandit)\n  - Package building and installation testing\n\n- **Documentation**: Automatically builds and deploys documentation to Read the Docs\n- **Code Quality**: Comprehensive quality checks and security scanning\n- **Automated Publishing**: Publishes to PyPI when new tags are created\n\n### Quality Checks\n\nThe CI pipeline enforces the following quality standards:\n\n- **Code Style**: Black formatting and isort import sorting\n- **Type Safety**: Mypy static type checking\n- **Code Quality**: Flake8 linting with strict rules\n- **Security**: Dependency and code security scanning\n- **Code Quality**: Comprehensive quality checks and security scanning\n\n## 🤝 Contributing\n\nWe welcome contributions! Please see our [Contributing Guide](CONTRIBUTING.md) for details.\n\n### Development Setup\n\n1. Fork the repository\n2. Clone your fork: `git clone https://github.com/your-username/cutewindow.git`\n3. Navigate to the project: `cd cutewindow`\n4. Install dependencies with Poetry: `poetry install --with dev`\n5. Set up pre-commit hooks: `poetry run python scripts/setup_precommit.py`\n6. Create your feature branch: `git checkout -b feature/amazing-feature`\n7. Make your changes and ensure they pass quality checks: `poetry run python scripts/quality_check.py`\n8. Run quality checks: `poetry run python scripts/quality_check.py`\n9. Format your code: `poetry run python scripts/format_code.py` or `poetry run black . \u0026\u0026 poetry run isort .`\n10. Commit your changes: `git commit -m 'feat: add amazing feature'`\n11. Push to the branch: `git push origin feature/amazing-feature`\n12. Open a Pull Request\n\n### Code Style\n\nWe use:\n- **Black** for code formatting\n- **isort** for import sorting\n- **flake8** for linting\n- **mypy** for type checking\n- **bandit** for security scanning\n- **safety** for dependency safety\n\n### Development Tools\n\nThe project includes several convenience scripts:\n\n```bash\n# Run comprehensive quality checks\npoetry run python scripts/quality_check.py\n\n# Run quality checks\npoetry run python scripts/quality_check.py\n\n# Auto-format code\npoetry run python scripts/format_code.py\n\n# Set up pre-commit hooks\npoetry run python scripts/setup_precommit.py\n```\n\n## 📄 License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## 📞 Support\n\n- 📧 **Email**: parhamoyan@yahoo.com\n- 🐛 **Issues**: [GitHub Issues](https://github.com/parhamoyan/cutewindow/issues)\n- 💬 **Discussions**: [GitHub Discussions](https://github.com/parhamoyan/cutewindow/discussions)\n- 📖 **Documentation**: [Read the Docs](https://cutewindow.readthedocs.io)\n\n## 🗺️ Roadmap\n\n- [ ] Additional window customization options\n- [ ] More examples and tutorials\n- [ ] PyQt6 support\n\n---\n\n**Made with ❤️ by Parham Oyan**\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fparhamoyan%2Fcutewindow","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fparhamoyan%2Fcutewindow","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fparhamoyan%2Fcutewindow/lists"}