Initial Commit

This commit is contained in:
helldh 2026-02-27 23:18:40 +03:00
commit 18d456bf2e
20 changed files with 1442 additions and 0 deletions

76
src/utils.py Normal file
View file

@ -0,0 +1,76 @@
from PyQt6.QtWidgets import (
QWidget,
QTableView,
QHBoxLayout,
QVBoxLayout,
QDateEdit,
QPushButton,
QLabel,
QHeaderView,
QAbstractItemView,
)
from PyQt6.QtSql import QSqlTableModel
class TabWidgetCustom(QWidget):
"""
Универсальный виджет для CRUD операций с таблицей БД.
Отображает данные через QSqlTableModel с тулбаром действий.
"""
def __init__(self, table_name: str, db, show_date_filter=False):
super().__init__()
self._name = table_name
self._db = db
self._show_date_filter = show_date_filter
self._setup()
def _setup(self):
self.root = QVBoxLayout(self)
if self._show_date_filter:
self.header = QHBoxLayout()
self.from_date = QDateEdit()
self.from_date.setCalendarPopup(True)
self.to_date = QDateEdit()
self.to_date.setCalendarPopup(True)
self.button_filter = QPushButton("Filter")
self.button_all = QPushButton("Show All")
self.header.addWidget(QLabel("From:"))
self.header.addWidget(self.from_date)
self.header.addWidget(QLabel("To:"))
self.header.addWidget(self.to_date)
self.header.addWidget(self.button_filter)
self.header.addWidget(self.button_all)
self.root.addLayout(self.header)
self.view = QTableView()
self.view.setSelectionBehavior(
QAbstractItemView.SelectionBehavior.SelectRows
)
self.view.horizontalHeader().setSectionResizeMode(
QHeaderView.ResizeMode.Stretch
)
self.view.setAlternatingRowColors(True)
self.btoolbar = QHBoxLayout()
self.button_add = QPushButton("+ Добавить")
self.button_del = QPushButton("- Удалить")
self.button_ok = QPushButton("✓ Применить")
self.button_deny = QPushButton("✗ Отменить")
self.button_csv = QPushButton("Экспорт CSV")
for btn in (self.button_add, self.button_del,
self.button_ok, self.button_deny, self.button_csv):
self.btoolbar.addWidget(btn)
self.root.addWidget(self.view)
self.root.addLayout(self.btoolbar)
self._setup_db()
def _setup_db(self):
self.model = QSqlTableModel(db=self._db)
self.model.setTable(self._name)
self.model.setEditStrategy(QSqlTableModel.EditStrategy.OnManualSubmit)
self.model.select()
self.view.setModel(self.model)