Saya memiliki tabel yang muncul di GUI saya. Pengguna dapat mengedit tabel ini dari GUI. bagaimana cara mendapatkan semua informasi yang telah diedit dan memperbaruinya di database? Pengguna mencentang kotak untuk setiap baris yang ingin mereka perbarui ke database, jadi saya memiliki daftar semua baris yang perlu diperbarui. Saya ingin memiliki daftar tupel, di mana setiap tupel adalah deretan nilai baru yang perlu diperbarui, mengingat bidang ID tetap tidak berubah (saya juga ingin tahu cara membuat pengguna tidak dapat mengedit beberapa bidang).
def click_btn_mailouts(self):
self.screen_name = "mailouts"
self.cur.execute("""SELECT s.StudentID, s.FullName, m.PreviouslyMailed, m.nextMail, m.learnersDate, m.RestrictedDate, m.DefensiveDate FROM
StudentProfile s LEFT JOIN Mailouts m ON s.studentID=m.studentID""")
self.all_data = self.cur.fetchall()
self.table.setRowCount(len(self.all_data))
self.tableFields = ["Check","Full name","Previously mailed?","Next mail","learnersDate","Restricted date","Defensive driving date"]
self.table.setColumnCount(len(self.tableFields))
self.table.setHorizontalHeaderLabels(self.tableFields)
self.checkbox_list = []
for i, item in enumerate(self.all_data):
FullName = QtGui.QTableWidgetItem(str(item[1]))
PreviouslyMailed = QtGui.QTableWidgetItem(str(item[2]))
LearnersDate = QtGui.QTableWidgetItem(str(item[3]))
RestrictedDate = QtGui.QTableWidgetItem(str(item[4]))
DefensiveDate = QtGui.QTableWidgetItem(str(item[5]))
NextMail = QtGui.QTableWidgetItem(str(item[6]))
self.table.setItem(i, 1, FullName)
self.table.setItem(i, 2, PreviouslyMailed)
self.table.setItem(i, 3, LearnersDate)
self.table.setItem(i, 4, RestrictedDate)
self.table.setItem(i, 5, DefensiveDate)
self.table.setItem(i, 6, NextMail)
chkBoxItem = QtGui.QTableWidgetItem()
chkBoxItem.setFlags(QtCore.Qt.ItemIsUserCheckable | QtCore.Qt.ItemIsEnabled)
chkBoxItem.setCheckState(QtCore.Qt.Unchecked)
self.checkbox_list.append(chkBoxItem)
self.table.setItem(i, 0, self.checkbox_list[i])
"""here is the format that I have for the edit function"""
def click_btn_edit(self):
checkedRows = []
for i, checkbox in enumerate(self.checkbox_list):
if checkbox.checkState() == QtCore.Qt.Checked:
checkedRows.append(i)
"""as the list itterates, if the checkbox item is ticked,
it passes through the if statement, otherwise it is ignored.
checkedRows becomes a list of all the indexes in the table where
an edit needs to be made"""
Jadi pada dasarnya saya perlu tahu cara membuat perubahan di QTableWidget di GUI mengingat daftar indeks tempat perubahan telah dilakukan, dan entah bagaimana memperbarui perubahan tersebut ke dalam database. Akan sangat membantu juga jika mengetahui cara menghentikan pengguna mengedit beberapa kolom, karena hal itu akan mengacaukan database.
QtSql
tempat Anda dapat menentukan koneksi databaseQtSql.QSqlDatabase
. Ini kemudian dikelola oleh model databaseQtSql.QSqlTableModel
dan dihubungkan keQtGui.QTableView
. Dengan cara ini, perubahan dalam QTableView secara langsung tercermin dalam database tanpa perlu menulis query database apa pun. Titik awal yang baik mungkin adalah tutorial ini tutorialspoint.com/pyqt/pyqt_database_handling.htm - person ImportanceOfBeingErnest   schedule 28.09.2016