Skip to main content

A collection of custom and reusable Qt widgets for PySide6. Provides advanced, reusable, and stylish graphical components to facilitate the development of modern and user-friendly interfaces.

Project description

EzQt-Widgets

PyPI version Python versions PyPI status License CI Docs uv linter type checker

EzQt-Widgets Logo

EzQt-Widgets is a modern collection of custom and reusable Qt widgets for PySide6 featuring advanced animated components, full type hints, and a simple API suitable for professional desktop applications.

📦 Installation

uv add ezqt-widgets

Or with pip:

pip install ezqt-widgets

Or from source:

git clone https://github.com/neuraaak/ezqt-widgets.git
cd ezqt-widgets && uv sync --all-extras

🚀 Quick Start

from ezqt_widgets import DateButton, IconButton, ToggleSwitch, AutoCompleteInput
from PySide6.QtWidgets import QApplication, QVBoxLayout, QWidget

app = QApplication([])
window = QWidget()
layout = QVBoxLayout()

# Create widgets
date_button = DateButton(placeholder="Select a date")
icon_button = IconButton(icon="path/to/icon.png", text="Click me")
toggle = ToggleSwitch(checked=True)
auto_input = AutoCompleteInput(completions=["Option 1", "Option 2", "Option 3"])

# Connect signals
date_button.dateChanged.connect(lambda date: print(f"Date: {date}"))
icon_button.clicked.connect(lambda: print("Button clicked"))
toggle.toggled.connect(lambda checked: print(f"Toggle: {checked}"))

# Add to layout
layout.addWidget(date_button)
layout.addWidget(icon_button)
layout.addWidget(toggle)
layout.addWidget(auto_input)

window.setLayout(layout)
window.show()
app.exec()

🎯 Key Features

  • ✅ PySide6 Compatible: All widgets based on PySide6
  • ✅ Full Type Hints: Complete typing support for IDEs and linters
  • ✅ Qt Signals: Native integration with Qt signal system
  • ✅ QSS Styling: Complete Qt stylesheet support
  • ✅ Smooth Animations: Configurable animations with easing curves
  • ✅ Accessibility: Accessibility features support
  • ✅ Comprehensive Tests: Complete test suite (~211 tests, ~80% coverage)
  • ✅ CLI Tools: Command-line interface for examples and testing

📚 Documentation

Full documentation is available online: neuraaak.github.io/ezqt-widgets

🧪 Testing

Comprehensive test suite with 211+ test cases covering all widgets.

# Install dev dependencies
uv sync --all-extras

# Run all tests
uv run pytest tests/

# Run specific test types
uv run python tests/run_tests.py --type unit

# With coverage
uv run python tests/run_tests.py --coverage

# Using CLI
ezqt test --unit
ezqt test --coverage

See the Testing Guide for complete details.

🛠️ Development Setup

For contributors and developers:

# Clone and install in development mode
git clone https://github.com/neuraaak/ezqt-widgets.git
cd ezqt-widgets
uv sync --all-extras

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

# Verify CLI installation
ezqt --version
ezqt info

See the Development Guide for detailed setup instructions.

🎨 Available Widgets

🎛️ Button Widgets (4)

Widget Description
DateButton Date picker button with integrated calendar
DatePickerDialog Modal calendar dialog for date selection
IconButton Button with icon support and optional text
LoaderButton Button with integrated loading animation

⌨️ Input Widgets (6)

Widget Description
AutoCompleteInput Text field with autocompletion
FilePickerInput Field with folder button opening a file/directory dialog
PasswordInput Password field with strength bar and visibility toggle
SearchInput Search field with history management
SpinBoxInput Numeric spin box with − and + buttons
TabReplaceTextEdit Text editor with tab replacement

🏷️ Label Widgets (4)

Widget Description
ClickableTagLabel Clickable tag with toggle state
FramedLabel Framed label for advanced styling
HoverLabel Label with hover icon display
IndicatorLabel Status indicator with colored LED

🔧 Miscellaneous Widgets (9)

Widget Description
CircularTimer Animated circular timer
CollapsibleSection Accordion-style section with expand/collapse animation
DraggableItem Draggable list item component
DraggableList List with draggable and reorderable items
NotificationBanner Animated slide-down banner with INFO/WARNING/ERROR/SUCCESS levels
OptionSelector Option selector with animated selector
ThemeIcon QIcon that adapts color to the active dark/light theme
ToggleIcon Toggleable icon (open/closed states)
ToggleSwitch Modern toggle switch with animation

📦 Dependencies

  • PySide6>=6.7.3,<7.0.0 – Qt for Python framework
  • click>=8.2.1 – Command-line interface toolkit
  • rich>=13.0.0 – Terminal formatting and output
  • PyYAML>=6.0 – YAML configuration support
  • typing_extensions>=4.0.0 – Extended typing support

🔧 Quick API Reference

from ezqt_widgets import (
    # Button widgets
    DateButton, DatePickerDialog, IconButton, LoaderButton,
    # Input widgets
    AutoCompleteInput, FilePickerInput, PasswordInput,
    SearchInput, SpinBoxInput, TabReplaceTextEdit,
    # Label widgets
    ClickableTagLabel, FramedLabel, HoverLabel, IndicatorLabel,
    # Misc widgets
    CircularTimer, CollapsibleSection, DraggableItem, DraggableList,
    NotificationBanner, OptionSelector, ThemeIcon, ToggleIcon, ToggleSwitch,
)

# Button examples
date_btn = DateButton(placeholder="Select date")
icon_btn = IconButton(icon="path/to/icon.png", text="Click")
loader_btn = LoaderButton(loading_text="Loading...")

# Input examples
auto_input = AutoCompleteInput(completions=["A", "B", "C"])
search_input = SearchInput(max_history=20)
spin_box = SpinBoxInput(minimum=0, maximum=100, value=50)

# Misc examples
timer = CircularTimer(duration=5000, loop=True)
switch = ToggleSwitch(checked=True)
selector = OptionSelector(options=["Small", "Medium", "Large"])

📄 License

MIT License – See LICENSE file for details.

🔗 Links


EzQt-Widgets – Modern, typed, and beautiful Qt widgets for Python. 🎨

Project details


Download files

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

Source Distribution

ezqt_widgets-2.7.3.tar.gz (213.9 kB view details)

Uploaded Source

Built Distribution

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

ezqt_widgets-2.7.3-py3-none-any.whl (99.6 kB view details)

Uploaded Python 3

File details

Details for the file ezqt_widgets-2.7.3.tar.gz.

File metadata

  • Download URL: ezqt_widgets-2.7.3.tar.gz
  • Upload date:
  • Size: 213.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for ezqt_widgets-2.7.3.tar.gz
Algorithm Hash digest
SHA256 8ddd814b888492ad52486bf0b1a4064148d9de98ee2a9ed8ff6410151a289091
MD5 c278b6f01edf38ef54c09a80bcade551
BLAKE2b-256 72e8da012a5a703c8d4a5c12256aabb68feb77fe538b6d9f3675182179857a23

See more details on using hashes here.

File details

Details for the file ezqt_widgets-2.7.3-py3-none-any.whl.

File metadata

  • Download URL: ezqt_widgets-2.7.3-py3-none-any.whl
  • Upload date:
  • Size: 99.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for ezqt_widgets-2.7.3-py3-none-any.whl
Algorithm Hash digest
SHA256 59376eb3f7d1bef83990bed26818d0ff942b70162c2c188f537056e1925de179
MD5 1170fc4569f61411f2d0f52a74cd834a
BLAKE2b-256 1619d7a035b343d7188560c5c72c61b75734973427ba1d24ecdc6b48fbf5763f

See more details on using hashes here.

Supported by

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