Вставка данных из базы данных SqlLite3 в QTableWidget - PullRequest
0 голосов
/ 08 февраля 2019

Я создаю графический интерфейс для нашей платформы тестирования. Пользователь должен иметь возможность выбирать тесты из таблицы для запуска.У меня проблемы с получением данных в саму таблицу.Я могу получить данные в порядке, но не могу заполнить QTableWidget

Это пример данных, которые я пытаюсь заполнить таблицу с

Id | Test name    | Owner | Script source
---|-----------   |-------|--------------
 1 | Login        |  1    | test_login_s
 2 | Logout       |  1    | test_logout_s
 3 | User > Edit  |  1    | test_user_edit_s

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

Вот моя последняя попытка имплиментации с использованием QtSQL.

def load_data(self):
    connection = sqlite3.connect('data.db')
    cursor = connection.cursor()
    cursor.execute('''SELECT * FROM Tests''')
    rows = cursor.fetchall()
    for row in range(len(rows)):
        for column in range(len(rows[row])):
            self.tblTests.setItem(row, column, QtWidgets.QTableWidgetItem(rows[row][column]))

В результате None возвращается из self.tblTests.setItem(row, column, QtWidgets.QTableWidgetItem(rows[row][column])).

Я также попробовал следующий подход

    for row, key in enumerate(rows):
        for column, data in enumerate(rows[row]):
            self.tblTests.setItem(row, column, QtWidgets.QTableWidgetItem(str(data)))

В этом случае data возвращает

1
Login
1
test_login_s
2
Logout
1
test_logout_s
3
User > Edit
1
test_user_edit_s

Это похоже на правильный путь.Это все еще, однако, не заполняет tblTests

1 Ответ

0 голосов
/ 08 февраля 2019

После попытки отладки вышеприведенного кода и того, что data возвращает значения, я подумал, что что-то должно быть отключено.

После просмотра функции setupUI() я наткнулся на строку self.tblTests.setColumnCount(0),Изначально я думал, что эта строка избыточна из-за вызова setItem(), но решил оставить ее в коде для отладки.

Я сделал удар в темноте и установил self.tblTests.setColumnCount(0)до 4, и теперь он работает как положено.

Я не видел ничего в документации, чтобы предположить, что setColumnCount необходимо вводить вручную при чтении документации.

Надеюсь, это поможет кому-то еще!

...