Нужна консультация специалиста здесь.
Использую PyQT5 и Python 3 для настройки пользовательского интерфейса. Я создал таблицу с помощью Qtablwiwdget и смог получить большинство элементов управления. Однако я застрял в операции удаления. Я создал кнопку Удалить , которая удаляет выбранную строку. Я могу достичь этого, передав значение currentrow
в функцию removerow
.
Теперь проблема в том, что после каждого удаления счетчик текущих строк уменьшается на 1, и, следовательно, если я нажимаю кнопку удаления несколько раз, удаляются строки над выбранной строкой, а не строки ниже.
Вот мой код:
self.DataTable = QTableWidget(self)
self.DataTable.setColumnCount(3)
self.DataTable.setRowCount(1)
self.DataTable.setHorizontalHeaderLabels(["Name","Age","Location"])
self.DataTable.horizontalHeaderItem(0).setTextAlignment(Qt.AlignHCenter)
self.DataTable.horizontalHeaderItem(1).setTextAlignment(Qt.AlignHCenter)
self.DataTable.horizontalHeaderItem(2).setTextAlignment(Qt.AlignHCenter)
self.DataTable.resize(450, 400)
self.Delete_butn.clicked.connect(self.On_Delete_Click) # button click
# слот
@pyqtSlot()
def On_Delete_Click(self):
SelectedRow = self.DataTable.currentRow()
rowcount = self.DataTable.rowCount()
if rowcount==0: # gives a pop up when now more rows are there to delete
msg = QMessageBox(self)
msg.setIcon(QMessageBox.Warning)
msg.setText("NOTE:")
msg.setInformativeText("\n No more rows to delete! \t\t")
msg.setWindowTitle("WARNING!")
# msg.setDetailedText("The details are as follows:")
msg.setStandardButtons(QMessageBox.Ok)
msg.buttonClicked.connect(self.msgbtn)
retval = msg.exec_()
elif SelectedRow==-1: # Gives pop up when no rows are selected
msg = QMessageBox(self)
msg.setIcon(QMessageBox.Warning)
msg.setText("NOTE:")
msg.setInformativeText("\n Please select the row to be deleted! \t\t")
msg.setWindowTitle("WARNING!")
# msg.setDetailedText("The details are as follows:")
msg.setStandardButtons(QMessageBox.Ok)
msg.buttonClicked.connect(self.msgbtn)
retval = msg.exec_()
else:
self.DataTable.removeRow(SelectedRow)
Чего я хочу добиться, так это, если у меня 8 строк (от 0-7), имеющих правильные значения, и в строках 3-6, имеющих неправильные значения, я сначала нажму на строку 3, затем нажмите "Удалить". При удалении строка сдвигается вверх, и я должен удалить строку 3 снова. Но этого не происходит. После 1-й операции удаления текущая строка уменьшается с 3 до 2, в результате чего теряются значения, которые присутствовали поверх неправильных значений ячеек