Initial Commit
This commit is contained in:
commit
18d456bf2e
20 changed files with 1442 additions and 0 deletions
76
src/utils.py
Normal file
76
src/utils.py
Normal 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)
|
||||
Loading…
Add table
Add a link
Reference in a new issue