Skip to main content

Add your description here

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")

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

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

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-0.1.0.tar.gz (29.2 kB view details)

Uploaded Source

Built Distribution

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

qtmvvm-0.1.0-py3-none-any.whl (13.9 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: qtmvvm-0.1.0.tar.gz
  • Upload date:
  • Size: 29.2 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-0.1.0.tar.gz
Algorithm Hash digest
SHA256 6ad9600c91c1e40c59f2789f9df788aabeaebbd5f9a1f13de85d13f54bd4dbc6
MD5 effc3d1b6676a1cc26837b73f9f470cc
BLAKE2b-256 2aaaef2798d4269c5fb04983f71c17142b7110a5c658ec46d4062833e719ef79

See more details on using hashes here.

File details

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

File metadata

  • Download URL: qtmvvm-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 13.9 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-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f902b061682d63f24344a9993359e63e973ba4db550d3aa22dc93c909388f5bb
MD5 2dc47446e13b31ddb029fda54ac0f2ba
BLAKE2b-256 886d831ea866efa1aea56c84d497148fe9bef23a59173f172a3f4acb0c1836ff

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