Skip to main content

winipyside

CI CD

CoverageTester ProjectTester

DependencyAuditor DependencyChecker MarkdownLinter PythonLinter SecurityChecker SpellChecker TypeChecker VersionControlHookManager

PackageManager Pyrigger RemoteVersionController VersionController

DocsBuilder PackageIndex ProgrammingLanguage License


A utilities package for PySide6


Overview

Winipyside is a production-ready PySide6 utilities package that provides reusable, well-tested components for building Qt desktop applications. It features encrypted file I/O with AES-GCM, a full-featured media player with encrypted video playback support, an embedded web browser with cookie management, toast notifications, and a modular page-based UI framework.

Key Highlights

  • ๐Ÿ” Encrypted File I/O: Transparent AES-GCM encryption for files and media playback
  • ๐ŸŽฌ Media Player: Full-featured player with encrypted video support, speed control, and fullscreen mode
  • ๐ŸŒ Web Browser: Embedded browser with cookie management and Qt/Python cookie conversion
  • ๐Ÿ”” Notifications: Toast notification system with auto-positioning and smart text truncation
  • ๐Ÿ—๏ธ UI Framework: Modular page-based architecture with lifecycle hooks and navigation
  • โœ… Type Safe: 100% type annotated with strict mypy checking
  • ๐Ÿงช Well Tested: Comprehensive test suite with pytest and pytest-qt
  • ๐Ÿš€ CI/CD Ready: Production-ready workflows for headless environments

Features

๐Ÿ” Encrypted File I/O

Transparent encryption/decryption for files and media with AES-GCM:

  • Chunked encryption for efficient streaming (64KB chunks)
  • Random access support with position mapping
  • Zero-copy decryption for media playback
  • Authenticated encryption with nonces and tags

๐ŸŽฌ Media Player

Full-featured video player with advanced controls:

  • Play/pause, speed control (0.2x-5x), volume slider
  • Seekable progress bar with throttled updates
  • Fullscreen mode with automatic UI hiding
  • Native encrypted video playback without temporary files
  • Position resumption and smart resource management

๐ŸŒ Web Browser

Embedded Chromium-based browser:

  • Navigation controls (back, forward, address bar)
  • Automatic cookie tracking
  • QNetworkCookie โ†” http.cookiejar.Cookie conversion
  • Domain-based cookie retrieval

๐Ÿ—๏ธ UI Framework

Modular architecture for building complex applications:

  • Lifecycle hooks: base_setup() โ†’ pre_setup() โ†’ setup() โ†’ post_setup()
  • Page-based navigation with QStackedWidget
  • Dynamic subclass discovery
  • SVG icon support
  • Automatic display name generation

Installation

Requirements

  • Python 3.12 or 3.13
  • PySide6
  • System dependencies (Linux only):
    • libegl1
    • libpulse0

Install from PyPI

pip install winipyside

Install from Source

git clone https://github.com/Winipedia/winipyside.git
cd winipyside
uv sync

Linux System Dependencies

sudo apt-get update
sudo apt-get install -y libegl1 libpulse0

Quick Start

Basic Application

from PySide6.QtWidgets import QApplication
from winipyside.src.ui.windows.base.base import Base as BaseWindow
from winipyside.src.ui.pages.browser import Browser

class MyApp(BaseWindow):
    @classmethod
    def get_all_page_classes(cls):
        return [Browser]

    @classmethod
    def get_start_page_cls(cls):
        return Browser

    def pre_setup(self) -> None:
        pass

    def setup(self) -> None:
        self.resize(1280, 720)

    def post_setup(self) -> None:
        pass

if __name__ == "__main__":
    app = QApplication([])
    window = MyApp()
    window.show()
    app.exec()

Encrypted Video Playback

from pathlib import Path
from cryptography.hazmat.primitives.ciphers.aead import AESGCM
from PySide6.QtCore import QUrl, QIODevice
from PySide6.QtMultimedia import QMediaPlayer, QAudioOutput
from winipyside.src.core.py_qiodevice import EncryptedPyQFile

# Generate encryption key
key = AESGCM.generate_key(bit_length=256)
aes_gcm = AESGCM(key)

# Play encrypted video
video_path = Path("encrypted_video.mp4")
encrypted_file = EncryptedPyQFile(video_path, aes_gcm)
encrypted_file.open(QIODevice.OpenModeFlag.ReadOnly)

player = QMediaPlayer()
player.setAudioOutput(QAudioOutput())
player.setSourceDevice(encrypted_file, QUrl.fromLocalFile(str(video_path)))
player.play()

Toast Notifications

from winipyside.src.ui.widgets.notification import Notification
from pyqttoast import ToastIcon

Notification(
    title="Success",
    text="Operation completed successfully!",
    icon=ToastIcon.SUCCESS,
    duration=5000
)

Documentation

Comprehensive documentation is available in the docs/ directory:

  • Core Package - Encrypted file I/O and QIODevice wrappers
  • UI Base - Foundation framework and lifecycle management
  • UI Widgets - Reusable widgets (Browser, MediaPlayer, Notifications)
  • UI Pages - Page components for navigation
  • UI Windows - Main window framework
  • API Reference - Complete API documentation

Architecture

winipyside/
โ”œโ”€โ”€ src/
โ”‚   โ”œโ”€โ”€ core/              # Encrypted file I/O
โ”‚   โ””โ”€โ”€ ui/
โ”‚       โ”œโ”€โ”€ base/          # Base classes and lifecycle
โ”‚       โ”œโ”€โ”€ widgets/       # Reusable widgets
โ”‚       โ”œโ”€โ”€ pages/         # Page components
โ”‚       โ””โ”€โ”€ windows/       # Window framework
โ”œโ”€โ”€ resources/             # SVG icons and static resources
โ””โ”€โ”€ dev/
    โ”œโ”€โ”€ builders/          # Build utilities
    โ”œโ”€โ”€ cli/              # CLI commands
    โ”œโ”€โ”€ configs/          # CI/CD configuration
    โ””โ”€โ”€ tests/            # Test fixtures

Development

Setup Development Environment

# Clone the repository
git clone https://github.com/Winipedia/winipyside.git
cd winipyside

# Install dependencies with uv
uv sync

# Install pre-commit hooks
uv run pre-commit install

# get familiar with pyrig

Contributing

Contributions are welcome! Please follow these guidelines:

  1. Fork the repository and create a feature branch
  2. Write tests for new functionality
  3. Ensure all tests pass and code quality checks succeed
  4. Update documentation as needed
  5. Submit a pull request with a clear description

Code Standards

  • Follow Google docstring convention
  • Maintain 100% type coverage
  • Write comprehensive tests (aim for >90% coverage)
  • Use descriptive variable names
  • Keep functions focused and small

License

This project is licensed under the MIT License, see the LICENSE file for details.

Acknowledgments

  • Built with Pyrig - Python project scaffolding framework
  • Uses PySide6 - Qt for Python
  • Toast notifications powered by pyqttoast

Support


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

winipyside-4.0.10.tar.gz (28.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

winipyside-4.0.10-py3-none-any.whl (41.1 kB view details)

Uploaded Python 3

File details

Details for the file winipyside-4.0.10.tar.gz.

File metadata

  • Download URL: winipyside-4.0.10.tar.gz
  • Upload date:
  • Size: 28.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.27 {"installer":{"name":"uv","version":"0.11.27","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for winipyside-4.0.10.tar.gz
Algorithm Hash digest
SHA256 c753db242234365fddeaa9e5ebab25ca5304aa222f9183ed49d7b022eb17d3fc
MD5 5f64f1ebba4585f243fd20a43a88785d
BLAKE2b-256 2b8909961b3c37903ff495475d180cd40d3c866d763ce02141bda37b90318804

See more details on using hashes here.

File details

Details for the file winipyside-4.0.10-py3-none-any.whl.

File metadata

  • Download URL: winipyside-4.0.10-py3-none-any.whl
  • Upload date:
  • Size: 41.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.27 {"installer":{"name":"uv","version":"0.11.27","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for winipyside-4.0.10-py3-none-any.whl
Algorithm Hash digest
SHA256 df856f00369695a28e9bfeeaa810852246a63d55033f44f17ff6f659f907ee30
MD5 6dcdf72c6ab1ed07237fdc3a22dceb9f
BLAKE2b-256 e39ed085dbafa79e61607c8bbfcf9e615d6546a4e4c0ea9d3b049b889caabe61

See more details on using hashes here.

Release history Release notifications | RSS feed

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page