Skip to main content

MVVM library for Qt with observable properties and data bindings.

Project description

QtMVVM

MVVM-библиотека для Qt с наблюдаемыми свойствами и привязками данных.

Языки: 🇬🇧 English | 🇷🇺 Русский

Установка

uv add qtmvvm

Быстрый старт

1. Создание наблюдаемых свойств

from qtmvvm import ObservableProperty

# Создание свойства с начальным значением
name = ObservableProperty("John")
age = ObservableProperty(25)

# Получение значения
print(name.value)  # "John"
print(name())      # "John"

# Установка значения
name.value = "Jane"
age(30)            # Альтернативный синтаксис

2. Создание ViewModel

from qtmvvm import BaseViewModel, computed_property

class PersonViewModel(BaseViewModel):
    # Простые свойства
    name: str = "John"
    age: int = 25
    
    # Вычисляемое свойство (только для чтения, авто-обновление)
    @computed_property(depends_on=["name", "age"])
    def description(self):
        return f"{self.name}, {self.age} лет"

# Использование
vm = PersonViewModel()
print(vm.name)         # "John"
print(vm.description)  # "John, 25 лет"

vm.name = "Jane"
print(vm.description)  # "Jane, 25 лет" (авто-обновление!)

3. Использование операторов биндингов

QtMVVM предоставляет три оператора для привязки данных:

Оператор Направление Описание
>> Свойство → Виджет 1-way биндинг
@ Свойство ↔ Виджет 2-way биндинг
<< Сигнал → Свойство Биндинг сигнала

1-Way биндинг (>>)

from qtmvvm import ObservableProperty
from qtpy.QtWidgets import QLabel

name = ObservableProperty("John")
label = QLabel()

name >> label  # При изменении name, label обновляется автоматически
name.value = "Jane"  # label.text = "Jane"

2-Way биндинг (@)

from qtmvvm import ObservableProperty
from qtpy.QtWidgets import QLineEdit

name = ObservableProperty("John")
edit = QLineEdit()

name @ edit  # Синхронизация в обоих направлениях

edit.setText("Jane")  # name.value = "Jane"
name.value = "Bob"    # edit.text = "Bob"

Биндинг сигнала (<<)

from qtmvvm import ObservableProperty
from qtpy.QtWidgets import QPushButton

click_count = ObservableProperty(0)
button = QPushButton("Click me")

click_count << button.clicked  # Каждый клик увеличивает click_count

4. Использование Command

Command оборачивает методы ViewModel для привязки к кнопкам с автоматической блокировкой во время выполнения.

from qtmvvm import BaseViewModel, command
from qtpy.QtWidgets import QPushButton

class CounterViewModel(BaseViewModel):
    count: int = 0

    @command
    def increment(self):
        self.count += 1

    @command
    async def load_data(self):
        import asyncio
        await asyncio.sleep(1)  # Асинхронная операция

vm = CounterViewModel()

# Привязка к кнопкам
inc_btn = QPushButton("+")
load_btn = QPushButton("Load")

vm.increment << inc_btn    # Клик → increment()
vm.load_data << load_btn   # Кнопка блокируется во время загрузки

Документация

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

qtmvvm-1.0.0.tar.gz (31.5 kB view details)

Uploaded Source

Built Distribution

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

qtmvvm-1.0.0-py3-none-any.whl (14.2 kB view details)

Uploaded Python 3

File details

Details for the file qtmvvm-1.0.0.tar.gz.

File metadata

  • Download URL: qtmvvm-1.0.0.tar.gz
  • Upload date:
  • Size: 31.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.9 {"installer":{"name":"uv","version":"0.10.9","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for qtmvvm-1.0.0.tar.gz
Algorithm Hash digest
SHA256 6a93150b60661b8728275159fe96b38cf587cee241277f75c6e431b55ee48f82
MD5 67015f3d8ba8f371913840add9e9829c
BLAKE2b-256 7218f5e5549b6acb936a04fbaacc294de205b1d870eec29df0167468de775a73

See more details on using hashes here.

File details

Details for the file qtmvvm-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: qtmvvm-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 14.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.9 {"installer":{"name":"uv","version":"0.10.9","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for qtmvvm-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 c9504f149b12aac69e50a2e49a84a2d494c8cf8309cee7040d5e94240be56d3e
MD5 89e6b5da8d23c97daabe2b7159b648e5
BLAKE2b-256 27a522d1aee061d07bb39de4109c8221987935a7710db3a7c7cd3ec0bb403a82

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