Skip to main content

winipyside

CI CD ProjectTester

ByteOrderMarkerFormatter CaseConflictChecker DependencyChecker EndOfFileFormatter EndOfLineFormatter JSONFormatter JSONLinter LargeFileChecker MarkdownLinter MergeConflictChecker ModuleTestNamingChecker PythonLinter SecretsChecker SecurityChecker ShellFormatter ShellLinter SpellChecker TOMLLinter TrailingWhitespaceFormatter TypeChecker YAMLLinter

PackageManager Pyrigger RemoteVersionController VersionControlHookManager 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.14.16.tar.gz (29.6 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.14.16-py3-none-any.whl (41.7 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: winipyside-4.14.16.tar.gz
  • Upload date:
  • Size: 29.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.12.1 {"installer":{"name":"uv","version":"0.12.1","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.14.16.tar.gz
Algorithm Hash digest
SHA256 f68cd5f7cf1795f3f346ada914fba679251a3caedf61960ebe3bec52059e85a0
MD5 ce6bed8c3b0ac4ce0c718ba6cfca2ddc
BLAKE2b-256 c7ef4dda511de90ee4db712c16e6311c4710b29c61b24a0c7b6722a497e7f0a8

See more details on using hashes here.

File details

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

File metadata

  • Download URL: winipyside-4.14.16-py3-none-any.whl
  • Upload date:
  • Size: 41.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.12.1 {"installer":{"name":"uv","version":"0.12.1","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.14.16-py3-none-any.whl
Algorithm Hash digest
SHA256 ebc538e200edb7728c5e80bcc1a91ba8deedfb258b378f4a353e8d516c93ab77
MD5 0acece2ea3ceeb5cfb27cdba656e48f1
BLAKE2b-256 45cb3ab21b1f5bfe4dcdb6c6db66e31cc938cebb837ee697d65afc0dc07f5357

See more details on using hashes here.

Release history Release notifications | RSS feed

4.14.47

2 files

4.14.45

2 files

4.14.43

2 files

4.14.42

2 files

4.14.40

2 files

4.14.39

2 files

4.14.38

2 files

4.14.37

2 files

4.14.35

2 files

4.14.34

2 files

4.14.32

2 files

4.14.29

2 files

4.14.28

2 files

4.14.27

2 files

4.14.25

2 files

4.14.22

2 files

4.14.21

2 files

4.14.20

2 files

4.14.19

2 files

4.14.18

2 files

4.14.17

2 files

This release

4.14.16 This release

2 files

4.14.14

2 files

4.14.13

2 files

4.14.12

2 files

4.14.11

2 files

4.14.9

2 files

4.14.8

2 files

4.14.7

2 files

4.14.6

2 files

4.14.5

2 files

4.14.3

2 files

4.14.2

2 files

4.14.1

2 files

4.14.0

2 files

4.13.0

2 files

4.12.0

2 files

4.11.0

2 files

4.2.0

2 files

4.1.6

2 files

4.1.3

2 files

4.1.2

2 files

4.1.0

2 files

4.0.16

2 files

4.0.15

2 files

4.0.14

2 files

4.0.13

2 files

4.0.12

2 files

4.0.11

2 files

4.0.10

2 files

4.0.9

2 files

4.0.8

2 files

4.0.7

2 files

4.0.6

2 files

4.0.5

2 files

4.0.1

2 files

4.0.0

2 files

3.1.7

2 files

3.1.6

2 files

3.1.2

2 files

3.1.1

2 files

3.1.0

2 files

3.0.0

2 files

2.20.0

2 files

2.19.0

2 files

2.18.0

2 files

2.17.0

2 files

2.16.0

2 files

2.11.0

2 files

2.10.0

2 files

2.8.0

2 files

2.7.1

2 files

2.7.0

2 files

2.6.1

2 files

2.6.0

2 files

2.5.4

2 files

2.5.3

2 files

2.5.2

2 files

2.5.1

2 files

2.5.0

2 files

2.4.2

2 files

2.4.1

2 files

2.4.0

2 files

2.3.0

2 files

2.2.8

2 files

2.2.7

2 files

2.2.6

2 files

2.2.5

2 files

2.2.4

2 files

2.2.3

2 files

2.2.2

2 files

2.2.1

2 files

2.2.0

2 files

2.1.101

2 files

2.1.100

2 files

2.1.99

2 files

2.1.98

2 files

2.1.97

2 files

2.1.96

2 files

2.1.95

2 files

2.1.94

2 files

2.1.93

2 files

2.1.92

2 files

2.1.91

2 files

2.1.90

2 files

2.1.89

2 files

2.1.88

2 files

2.1.87

2 files

2.1.86

2 files

2.1.85

2 files

2.1.84

2 files

2.1.83

2 files

2.1.82

2 files

2.1.81

2 files

2.1.80

2 files

2.1.79

2 files

2.1.78

2 files

2.1.77

2 files

2.1.76

2 files

2.1.75

2 files

2.1.74

2 files

2.1.73

2 files

2.1.72

2 files

2.1.71

2 files

2.1.70

2 files

2.1.69

2 files

2.1.68

2 files

2.1.67

2 files

2.1.66

2 files

2.1.65

2 files

2.1.64

2 files

2.1.63

2 files

2.1.62

2 files

2.1.61

2 files

2.1.60

2 files

2.1.59

2 files

2.1.58

2 files

2.1.57

2 files

2.1.56

2 files

2.1.55

2 files

2.1.54

2 files

2.1.53

2 files

2.1.52

2 files

2.1.51

2 files

2.1.50

2 files

2.1.49

2 files

2.1.48

2 files

2.1.47

2 files

2.1.46

2 files

2.1.45

2 files

2.1.44

2 files

2.1.43

2 files

2.1.42

2 files

2.1.41

2 files

2.1.40

2 files

2.1.39

2 files

2.1.38

2 files

2.1.37

2 files

2.1.36

2 files

2.1.35

2 files

2.1.34

2 files

2.1.33

2 files

2.1.32

2 files

2.1.31

2 files

2.1.30

2 files

2.1.29

2 files

2.1.28

2 files

2.1.27

2 files

2.1.26

2 files

2.1.25

2 files

2.1.24

2 files

2.1.23

2 files

2.1.22

2 files

2.1.21

2 files

2.1.20

2 files

2.1.19

2 files

2.1.18

2 files

2.1.17

2 files

2.1.16

2 files

2.1.15

2 files

2.1.14

2 files

2.1.13

2 files

2.1.12

2 files

2.1.11

2 files

2.1.10

2 files

2.1.9

2 files

2.1.8

2 files

2.1.7

2 files

2.1.6

2 files

2.1.5

2 files

2.1.4

2 files

2.1.3

2 files

2.0.3

2 files

2.0.2

2 files

2.0.1

2 files

2.0.0

2 files

1.0.11

2 files

1.0.10

2 files

1.0.9

2 files

1.0.8

2 files

1.0.7

2 files

1.0.6

2 files

1.0.5

2 files

1.0.4

2 files

1.0.3

2 files

1.0.2

2 files

1.0.1

2 files

1.0.0

2 files

Supported by

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