Добавление строк в таблицу QTableWidget сверху

Рейтинг: 0Ответов: 1Опубликовано: 25.01.2023

Сделал таблицу QTableWidget в 5 столбцов, написал функцию добавляющую строки.

Но появился вопрос: новая строка в таблицу добавляется снизу, как сделать так чтобы она добавлялась сверху.

Кому надо вот:

   global cause_nr
   cause_nr = -1
   def C_Take(self):
       OB = self.card_balance.toPlainText()
       NB = self.Edit_sum.toPlainText()
       if NB.isdigit():
           if int(NB) <= int(OB):
               nr = self.tableWidget.rowCount()
               self.tableWidget.insertRow(nr)

               global cause_nr
               cause_nr += 1

               self.tableWidget.setItem(nr, 0, QtWidgets.QTableWidgetItem(str(NB)))
               self.tableWidget.setItem(nr, 1, QtWidgets.QTableWidgetItem("Снятие"))
               self.tableWidget.setItem(nr, 3, QtWidgets.QTableWidgetItem("Карта"))
               NB = int(OB) - int(NB)
               NB = str(NB)
               self.tableWidget.setItem(nr, 4, QtWidgets.QTableWidgetItem(NB))
               self.Edit_sum.setText("")
               self.card_balance.setText(NB)
               self.Frame_cause.show()
           elif int(NB) > int(OB):
               self.Edit_sum.setText("Недостаточно денег на карте!")
       else:
           self.Edit_sum.setText("Ошибка: один из символов не является числом")
           self.card_balance.setText(OB)

    def close_cause(self):
        nr = cause_nr
        self.tableWidget.setItem(nr, 2, QtWidgets.QTableWidgetItem(self.Edit_cause.toPlainText()))
        self.Edit_cause.setPlainText("")
        self.Frame_cause.hide()
        pass

Так и вот и сама таблица:

self.tableWidget = QtWidgets.QTableWidget(self.Historyframe)
        self.tableWidget.setGeometry(QtCore.QRect(10, 70, 1181, 721))
        self.tableWidget.setFixedSize(1181, 721)
        self.tableWidget.setStyleSheet("background-color:white;\n"
                                       "border-radius: 10\n"
                                       "")
        self.tableWidget.setObjectName("tableWidget")
        self.tableWidget.setColumnCount(5)
        self.tableWidget.setRowCount(0)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(0, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(1, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(2, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(3, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(4, item)
        self.tableWidget.setColumnWidth(2, 766)

всю прогу не стал скидывать так как 1000 строк

Ответы

▲ 1Принят

Пожалуйста, всегда предоставляйте минимально-воспроизводимый пример, который демонстрирует проблему. Я уже писал вам об этом, прочитайте внимательно, то что я вам писал.

void QTableWidget::insertRow(int row)

Вставляет пустую строку в таблицу в row.

import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.Qt import *


class MyApp(QWidget):
    def __init__(self):
        super().__init__()


        self.tableWidget = QtWidgets.QTableWidget()   # (self.Historyframe)
# ???    self.tableWidget.setGeometry(QtCore.QRect(10, 70, 1181, 721))
# ???    self.tableWidget.setFixedSize(1181, 721)
        self.tableWidget.setStyleSheet("background-color:white;\n"
                                       "border-radius: 10\n"
                                       "")
        self.tableWidget.setObjectName("tableWidget")
        self.tableWidget.setColumnCount(5)
        self.tableWidget.setRowCount(0)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(0, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(1, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(2, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(3, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(4, item)
        self.tableWidget.setColumnWidth(2, 766)
        
        
#        global cause_nr
#        cause_nr = -1
        self.cause_nr = 1                                         # +++ self.
    
        self.pushButton = QtWidgets.QPushButton('Add row')
        self.pushButton.clicked.connect(self.add_row)
        
        layout = QVBoxLayout(self)
        layout.addWidget(self.tableWidget)
        layout.addWidget(self.pushButton)
        
    def add_row(self):
        self.tableWidget.insertRow(0)
        self.tableWidget.setItem(0, 0, QTableWidgetItem(f'{self.cause_nr}'))
        self.tableWidget.setItem(0, 1, QTableWidgetItem("Снятие"))
        self.tableWidget.setItem(0, 3, QTableWidgetItem("Карта"))

        self.cause_nr += 1                                        # +++ self.


if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = MyApp()
    w.show()
    sys.exit(app.exec_())

введите сюда описание изображения