Add double click and require people have books assigned before double click
This commit is contained in:
33
main.py
33
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 "
|
||||
|
||||
Reference in New Issue
Block a user