Metadata-Version: 2.4
Name: fastqt6
Version: 0.1.1
Summary: Convenient PyQt6 templates for dynamic forms, CRUD windows, Designer .ui files and SQL helpers
Author: Leevandr
License-Expression: MIT
Project-URL: Homepage, https://github.com/Leevandr/fastQT6
Project-URL: Repository, https://github.com/Leevandr/fastQT6
Keywords: pyqt6,qt,designer,mysql,crud,forms
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Database
Classifier: Topic :: Software Development :: User Interfaces
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: PyQt6>=6.6
Requires-Dist: PyMySQL>=1.1
Dynamic: license-file

# fastqt6

`fastqt6` - это небольшая библиотека-шаблон для PyQt6-проектов: динамические формы,
CRUD-окна, SQL-хелперы и генерация `.ui` файлов для Qt Designer.

Установка:

```bash
python -m pip install fastqt6
```

Локальная установка из репозитория:

```bash
python -m pip install -e .
```

## Быстрый старт в PyCharm

1. Создай новый проект в PyCharm:

```text
File -> New Project -> Pure Python
```

2. Открой вкладку `Terminal` внизу PyCharm и установи библиотеку:

```bash
python -m pip install fastqt6
```

3. Создай готовый маленький проект:

```bash
fastqt6 scaffold .
```

Если команда `fastqt6` не находится, используй так:

```bash
python -m fastqt6.cli scaffold .
```

4. Запусти файл `main.py` в PyCharm. Откроется простое CRUD-окно с таблицей
товаров. Это минимальный пример, который можно дальше менять под свой вариант.

5. Для генерации `.ui` файлов Qt Designer:

```bash
mkdir ui gen
fastqt6 ui-auth ui/auth.ui
fastqt6 ui-main ui/main.ui --tabs "Каталог,Мои заказы,Все заказы,Статистика"
fastqt6 ui-form ui/product.ui --title "Товар" --class-name ProductDialog \
  --field article:text:Артикул \
  --field title:text:Название \
  --field price:float:Цена
```

6. Конвертация `.ui` в Python:

```bash
pyuic6 ui/product.ui -o gen/product.py
```

Полный урок для PyCharm:
[docs/PYCHARM_TUTORIAL.md](https://github.com/Leevandr/fastQT6/blob/main/docs/PYCHARM_TUTORIAL.md).

## Быстрый пример кода

```python
from PyQt6.QtWidgets import QApplication
from fastqt6 import SQLDatabase, field
from fastqt6.widgets import CrudWindow

SCHEMA = """
create table if not exists products (
    id integer primary key autoincrement,
    article text not null,
    title text not null,
    price real not null default 0,
    stock integer not null default 0
);
"""

app = QApplication([])
db = SQLDatabase.sqlite("app.db")
db.run_script(SCHEMA)

window = CrudWindow(
    db,
    table="products",
    fields=[
        field("article", "Артикул", required=True),
        field("title", "Название", required=True),
        field("price", "Цена", "float", min_value=0),
        field("stock", "Остаток", "int", min_value=0),
    ],
)
window.show()
app.exec()
```

## SQL-хелперы

SQLite:

```python
from fastqt6 import SQLDatabase

db = SQLDatabase.sqlite("app.db")
db.insert("products", {"article": "A-1", "title": "Мяч", "price": 1000})
rows = db.select("products", where="price > ?", params=(500,), order_by="title")
db.update("products", {"price": 1200}, "id=?", (1,))
db.delete("products", "id=?", (1,))
```

MySQL:

```python
from fastqt6 import SQLDatabase

db = SQLDatabase.mysql("sportplus_kvalik", user="root", password="")
user = db.login("users", "admin", "admin")
rows = db.fetch_all("select * from products where title like ?", ("%мяч%",))
```

В запросах можно писать `?` как универсальный placeholder. Для MySQL библиотека
сама заменит его на `%s`.

## Динамические формы

```python
from fastqt6 import field
from fastqt6.forms import DynamicFormDialog

fields = [
    field("article", "Артикул", required=True),
    field("title", "Название", required=True),
    field("price", "Цена", "float", min_value=0),
    field("category_id", "Категория", "combo", choices=[("Мячи", 1), ("Обувь", 2)]),
]

dialog = DynamicFormDialog(fields, title="Товар")
if dialog.exec():
    data = dialog.get_data()
```

## Генерация файлов Qt Designer

Создать `auth.ui`:

```bash
fastqt6 ui-auth ui/auth.ui
```

Создать главное окно с вкладками:

```bash
fastqt6 ui-main ui/main.ui --tabs "Каталог,Мои заказы,Все заказы,Статистика"
```

Создать форму:

```bash
fastqt6 ui-form ui/product.ui \
  --title "Товар" \
  --class-name "ProductDialog" \
  --field article:text:Артикул \
  --field title:text:Название \
  --field price:float:Цена \
  --field stock:int:Остаток
```

После этого файл можно открыть в Qt Designer или конвертировать:

```bash
pyuic6 ui/product.ui -o gen/product.py
```

## CLI

```text
fastqt6 scaffold my_app
fastqt6 ui-auth ui/auth.ui
fastqt6 ui-main ui/main.ui
fastqt6 ui-form ui/form.ui --field title:text:Название
```

## Что вводить на PyPI Trusted Publisher

Для репозитория `git@github.com:Leevandr/fastQT6.git` заполни форму так:

```text
PyPI Project Name: fastqt6
Owner: Leevandr
Repository name: fastQT6
Workflow name: publish.yml
Environment name: pypi
```

Workflow уже лежит в `.github/workflows/publish.yml`. В GitHub желательно создать
environment с названием `pypi`: `Settings -> Environments -> New environment`.

Публикация пойдет через GitHub Actions без API-токена: после настройки Trusted
Publisher создай GitHub Release или запусти workflow вручную.
