내 GUI에 표가 나타납니다. 사용자는 GUI에서이 테이블을 편집 할 수 있습니다. 편집 된 모든 정보를 얻고 데이터베이스에서 업데이트하려면 어떻게합니까? 사용자는 데이터베이스로 업데이트 할 각 행의 확인란을 선택하므로 업데이트가 필요한 모든 행의 목록이 있습니다. 나는 각 튜플이 ID 필드가 변경되지 않은 상태에서 업데이트되어야하는 새로운 값의 행인 튜플 목록을 원합니다. 사용자가 일부 필드를 편집 할 수 없도록 만드는 방법을 알고 싶습니다.Python과 Python의 테이블에서 사용자가 변경 한 정보를 얻으려면 어떻게해야합니까?
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"""
그래서 기본적으로 나는 변경이 된 인덱스의 목록 주어진 GUI에 QTableWidget에서 변경을 얻는 방법을 알고, 어떻게 든 데이터베이스에 업데이트 된 변경 사항을 얻을 필요가있다. 또한 사용자가 일부 필드를 편집하지 못하도록하는 방법을 알고 있으면 데이터베이스를 망칠 수 있으므로 도움이됩니다.
데이터베이스를 수동으로 조작해야합니까? PyQt는 데이터베이스 연결'QtSql.QSqlDatabase'를 정의 할 수있는'QtSql'이라는 훌륭한 인터페이스를 제공합니다. 이것은 데이터베이스 모델'QtSql.QSqlTableModel'에 의해 관리되고'QtGui.QTableView'에 연결됩니다. 이러한 방식으로 QTableView의 변경 사항은 데이터베이스 쿼리를 작성할 필요없이 데이터베이스에 직접 반영됩니다. 좋은 시작점은이 튜토리얼이 될 것입니다. https://www.tutorialspoint.com/pyqt/pyqt_database_handling.htm – ImportanceOfBeingErnest
저는 PyQT에서 독학하기를 강요합니다. 그래서 나는 이것이 존재했다는 것을 몰랐습니다. 내 프로그램은 이미 QTableWidget에 너무 의존적이다. QTableWidget에 대한 편집 전략을 설정하거나 사용자가 테이블에서 편집 한 데이터에 액세스 할 수있는 방법이 있습니까? –
나는 아직도 QtSql 인터페이스를 사용하는 것이 가치 있다고 생각한다. QTableWidget은 QTableView를 상속하므로 많은 불필요한 줄을 삭제하는 것 이외에는 코드를 많이 변경해야한다고 상상할 수는 없습니다. – ImportanceOfBeingErnest