Skip to content

Leevandr/fastQT6

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

fastqt6

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

Установка:

python -m pip install fastqt6

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

python -m pip install -e .

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

  1. Создай новый проект в PyCharm:
File -> New Project -> Pure Python
  1. Открой вкладку Terminal внизу PyCharm и установи библиотеку:
python -m pip install fastqt6
  1. Создай готовый маленький проект:
fastqt6 scaffold .

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

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

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

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:Цена
  1. Конвертация .ui в Python:
pyuic6 ui/product.ui -o gen/product.py

Полный урок для PyCharm: docs/PYCHARM_TUTORIAL.md.

Офлайн-туториал внутри установленной библиотеки

Начиная с версии 0.1.2, инструкция лежит прямо внутри пакета. После python -m pip install fastqt6 ее можно открыть без интернета в PyCharm:

External Libraries
  -> Python ...
  -> site-packages
  -> fastqt6
  -> docs
  -> PYCHARM_TUTORIAL.md

Также можно скопировать инструкцию в текущий проект:

fastqt6 tutorial --copy

Или просто узнать путь к файлу внутри site-packages:

fastqt6 tutorial

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

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:

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:

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.

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

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:

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:Цена \
  --field stock:int:Остаток

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

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

CLI

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 заполни форму так:

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 вручную.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages