op13-task5/src/utils.py
2026-02-27 23:18:40 +03:00

76 lines
No EOL
2.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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)