Παραθέτω τον κώδικα με τη λύση που βρήκα, μήπως τυχόν χρειαστεί σε κάποιον κάποια άλλη φορά.
Η εφαρμογή αφορά σε "Τηλεφωνική Ατζέντα" και δίνει στον χρήστη διάφορες επιλογές στο "main" αρχείο (Add new, Search, Delete κ.λ.π.).
Στο "main" αρχείο λοιπόν υπάρχει το button
self.BulkRemoveButton.clicked.connect(self.deleteRecord)
που καλεί στο ίδιο αρχείο την function deleteRecord:
def deleteRecord(self):
self.clearForms()
DbConnect.printRecordsToDelete(self)
Αυτή κάνει import ένα άλλο αρχείο και τρέχει την function printRecordsToDelete:
#get all records and provide
#a way to delete them
def printRecordsToDelete(self):
connectToDb(self)
self.db.open()
try:
model = QtSql.QSqlRelationalTableModel()
model.setEditStrategy(model.OnManualSubmit)
model.setTable("location")
model.setJoinMode(QtSql.QSqlRelationalTableModel.InnerJoin)
model.setRelation(1, QtSql.QSqlRelation("persons", "id", "lastname, firstname") )
model.setSort(2, QtCore.Qt.AscendingOrder)
language = self.dictLang
model.select()
model.setHeaderData(0, QtCore.Qt.Horizontal, language["idLabel"] )
model.setHeaderData(1, QtCore.Qt.Horizontal, language["lastNameLabel"] )
model.setHeaderData(2, QtCore.Qt.Horizontal, language["firstNameLabel"] )
model.setHeaderData(3, QtCore.Qt.Horizontal, language["addressLabel"] )
model.setHeaderData(4, QtCore.Qt.Horizontal, language["cityLabel"] )
self.DeleteTableView.setGeometry(20, 70, 640, 400)
self.DeleteTableView.setStyleSheet(''' QTableView {background-color:transparent; border:0px solid #000000; color:#000000; text-align:center; font-weight:none; font-size:11pt;}''')
self.DeleteTableView.setModel(model)
rows = model.rowCount()
for row in xrange(rows):
deleteLabel = QtGui.QLabel()
deleteLabel.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignVCenter)
deleteLabel.setStyleSheet("QLabel {border:0px solid #000000; border-radius: 2px; background-color:gray; padding: 0px 5px 0 5px; text-align:center; font-weight:none; font-size:11pt;}")
self.DeleteTableView.setIndexWidget(model.index(row,0), deleteLabel)
deleteLabel.setText(language["deleteRecord"])
deleteLabel.show()
self.unForeignKey = QtCore.QObject
self.DeleteTableView.resizeColumnsToContents()
self.DeleteTableView.connect(self.DeleteTableView, QtCore.SIGNAL("clicked(QModelIndex)"), self.cellClicked)#pass row id to delete function
self.DeleteTableView.show()
except Exception as exc:
printException(self, exc)
self.db.close()
self.db.removeDatabase("phonebook.db")
return True
Το self.DeleteTableView.connect(self.DeleteTableView, QtCore.SIGNAL("clicked(QModelIndex)"), self.cellClicked) επιστρέφει στο "main" αρχείο το row id της εγγραφής που θέλει ο χρήστης να διαγράψει:
#get record id of clicked cell
def cellClicked(self, modelId):
self.unIdToBeDeleted = modelId.data(QtCore.Qt.DisplayRole).toInt()
self.unIdToBeDeleted = self.unIdToBeDeleted[0]
if self.unIdToBeDeleted != 0:
#print warning message pop up
language = self.dictLang
warnMessage = QtGui.QMessageBox()
warnMessage.addButton(QtGui.QPushButton(language["delete"]), QtGui.QMessageBox.YesRole)
warnMessage.addButton(QtGui.QPushButton(language["cancel"]), QtGui.QMessageBox.RejectRole)
warnMessage.addButton(QtGui.QPushButton(language["edit"]), QtGui.QMessageBox.NoRole)
msg = warnMessage.exec_()
if msg == 2:
DbConnect.editRelatedRows(self)
elif msg == 1:
pass
elif msg == 0:
DbConnect.deleteRelatedRows(self)
else:
pass
else:
return False
κι απο κει και πέρα, ανάλογα με το τι θα επιλέξει ο χρήστης, το καθένα παίρνει το δρόμο του...
Υπάρχει ένα συνεχές "πέρα-δώθε" μεταξύ του main και του άλλου αρχείου το οποίο πιθανώς να μπορεί να αποφευχθεί αλλά προς το παρόν δεν έχω τον χρόνο να μπλέξω με προβλήματα μεταβλητών που πρέπει ή δεν πρέπει να είναι self, globals,locals και δεν ξέρω κι εγώ τι άλλο...
Επίσης, υπάρχουν κι άλλα λειτυργικά θέματα.
Όπως οτι οι διάφορες φόρμες πρέπει να "καθαρίζονται" ώστε να μην εμφανίζονται στην οθόνη ασυνάρτητα πεδία (που έχουν ξεμείνει από το Search για παράδειγμα).
Κι αυτό είναι πιο εύκολο να γίνεται από το "main" αρχείο, παρά να καλούν όλα τα αρχεία όλα τα άλλα για ψύλου πήδημα
Οπότε μένει ως έχει μέχρι να βρεθεί χρόνος.
Όποιος έχει κάποια ιδέα για αλλαγή/βελτιστοποίση είναι ευπρόσδεκτος να την καταθέσει.