diff --git a/main.py b/main.py index d07d285..aac38eb 100755 --- a/main.py +++ b/main.py @@ -4,7 +4,7 @@ import re import sys from typing import cast -from PyQt6.QtCore import Qt, pyqtSlot +from PyQt6.QtCore import QModelIndex, Qt, pyqtSlot from PyQt6.QtGui import ( QAction, QFont, @@ -19,8 +19,6 @@ from PyQt6.QtWidgets import QApplication, QFileDialog, QMainWindow from lib import * from ui.MainWindow import Ui_MainWindow -# from ui.testWindow import Ui_MainWindow - def query_error(query: QSqlQuery) -> None: print( @@ -34,17 +32,28 @@ def query_error(query: QSqlQuery) -> None: raise Exception("SQL Error") +class ModelOverride(QSqlQueryModel): + def flags(self, index: QModelIndex) -> Qt.ItemFlag: + itemFlags = super(ModelOverride, self).flags(index) + value = index.siblingAtColumn(3).data() + if not value or value < 1: + itemFlags &= ~(Qt.ItemFlag.ItemIsSelectable | Qt.ItemFlag.ItemIsEnabled) + return itemFlags + + class MainWindow(QMainWindow, Ui_MainWindow): def __init__(self) -> None: super(MainWindow, self).__init__() self.setupUi(self) - model = QSqlQueryModel() + # model = QSqlQueryModel() + model = ModelOverride() query = QSqlQuery("SELECT * FROM people ORDER BY name") model.setQuery(query) self.peopleView.setModel(model) self.peopleView.setModelColumn(1) self.ReadButton.clicked.connect(self.readAction) self.bookBtn.clicked.connect(self.bookAction) + self.peopleView.doubleClicked.connect(self.readAction) self.createActions() self.show() return @@ -148,11 +157,15 @@ class MainWindow(QMainWindow, Ui_MainWindow): return @pyqtSlot() - def readAction(self) -> None: - indexes = self.peopleView.selectedIndexes() - if len(indexes) < 1: - return - person_id = indexes[0].siblingAtColumn(0).data() + @pyqtSlot(QModelIndex) + def readAction(self, index: QModelIndex | None = None) -> None: + if index: + person_id = index.siblingAtColumn(0).data() + else: + indexes = self.peopleView.selectedIndexes() + if len(indexes) < 1: + return + person_id = indexes[0].siblingAtColumn(0).data() dlg = EditDialog(person_id) dlg.exec() return @@ -232,7 +245,7 @@ def schema_update(db: QSqlDatabase) -> None: if not query.exec(matches.group(1) + new_table_name + matches.group(3)): query_error(query) # step 5 transfer content - coldefs = re.search(r"\((.+)\)", old).group(1).split(", ") # type: ignore[union-attr] + coldefs = re.search(r"\((.+)\)", old).group(1).split(", ") # type: ignore[union-attr] cols = [x.split(" ")[0] for x in coldefs] if not query.exec( "INSERT INTO "