SQLite и табличный виджет

Как сделать так, чтобы заголовки в QTableWidget также обновлялись после вызова метода loadData.

def loadData(self):
    connection = sqlite3.connect('CUSP.db')
    query = "SELECT * FROM ZAYAVITEL"
    result = connection.execute(query)
    self.tableWidget.setColumnCount(6)
    for row_number, row_data in enumerate(result):
        self.tableWidget.insertRow(row_number)
        for column_number, data in enumerate(row_data):
            self.tableWidget.setItem(row_number, column_number, QtWidgets.QTableWidgetItem(str(data)))
    connection.close()

person RoyalGoose    schedule 21.11.2019    source источник
comment
Добро пожаловать в stackoverflow! Не могли бы вы предоставить больше информации о вашей проблеме? Чего вы пытаетесь достичь? Что вы пробовали? Какие проблемы вы уже обнаружили? Не стесняйтесь добавлять эту информацию, редактируя свой вопрос.   -  person bracco23    schedule 21.11.2019


Ответы (1)


Вы можете получить названия столбцов, используя cursor.description:

def loadData(self):
    self.tableWidget.setColumnCount(0)
    self.tableWidget.setRowCount(0)

    connection = sqlite3.connect("CUSP.db")
    cursor = connection.execute("SELECT * FROM ZAYAVITEL")
    # https://stackoverflow.com/a/7831685/6622587
    names = [description[0] for description in cursor.description]
    self.tableWidget.setColumnCount(len(names))
    self.tableWidget.setHorizontalHeaderLabels(names)

    for i, row_data in enumerate(cursor):
        self.tableWidget.insertRow(i)
        for j, value in enumerate(row_data):
            it = QtWidgets.QTableWidgetItem()
            it.setData(QtCore.Qt.DisplayRole, value)
            self.tableWidget.setItem(i, j, it)
person eyllanesc    schedule 21.11.2019
comment
Спасибо, это работает. Но как сделать так, чтобы каждый раз новые строки не добавлялись к предыдущим, а таблица просто обновляла значения? - person RoyalGoose; 21.11.2019
comment
@RoyalGoose Если вы понимаете, что я использовал clear(), который очищает предыдущие данные и размещает новую информацию. - person eyllanesc; 21.11.2019
comment
Я заметил, но почему-то каждый раз после вызова этой функции у меня дополнительно появляется еще две пустые строки - person RoyalGoose; 21.11.2019
comment
Я понял проблему - функция .clear() удаляет только данные из соответствующих ячеек, но перед операциями необходимо полностью очистить весь tableWidget, т.е. и строки и столбцы - person RoyalGoose; 21.11.2019