私は以前同様の質問をしましたが、結果がうまくいかず、理由がわかりません。QTableWidgetからユーザーが編集したデータをどのように取得するのですか(PythonのPython)
self.changed_items = set()
self.table.itemChanged.connect(self.log_change)
そして、次の関数を追加します:
def log_change(self):
self.changed_items.add(self.item)
print(self.item)
ザ・追加するコードは、この関数の最後に(正確にインデント)ことを示唆した
def click_btn_printouts(self):
self.cur.execute("""SELECT 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.search_results()
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, self.item in enumerate(self.all_data):
FullName = QtGui.QTableWidgetItem(str(self.item[0]))
PreviouslyMailed = QtGui.QTableWidgetItem(str(self.item[1]))
LearnersDate = QtGui.QTableWidgetItem(str(self.item[2]))
RestrictedDate = QtGui.QTableWidgetItem(str(self.item[3]))
DefensiveDate = QtGui.QTableWidgetItem(str(self.item[4]))
NextMail = QtGui.QTableWidgetItem(str(self.item[5]))
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])
:ここ は、元のコードでした
予想されるプリントが編集済みのデータでしたが、編集前のデータが表示されます。
QTableViewとQtSqlは、SQLクエリで使用し、選択したすべてのレコードをリストに入れ、特定の列が編集されないようにすることができない限り使用できません。もし誰かがこれをやる方法を知っていれば、それは素晴らしいことです。私は現時点ですべての文書を読む時間がありません。
私がしたいのは、ユーザーがQTableWidgetからデータを変更し、その変更されたデータをレコードとして取得できるようにすることです。
私の最終目標はQTableWidgetのsetEditStrategy(QSqlTableModel.OnManualSubmit)
に相当します。
私はしばらくの間これを理解しようとしていましたが、私はそれを整理しておきたいのですが、それはクライアントのためにこのプログラムを終了するために必要な最後のことです。
[他の投稿]で受け入れられた回答(http://stackoverflow.com/questions/39742199/how-do-i-get-the-information-that-the-user-has-changed-in-あなたが '.add(self.item)'を引用している間に 'def log_change(self、item):' 'self.changed_items.add(item)'と言っていました。もちろん違います。 – ImportanceOfBeingErnest
まだ同じであるはずです。私は自分のプログラムで動作するようにitemをself.itemに変換しました。 –
古いデータを取得するのは、以前の投稿の答えの代わりに 'self.item'を使うからです。 – ImportanceOfBeingErnest