Разрабатываю настольное приложение на PYQT5 с интеграцией posgtresql. Я наткнулся на ситуацию, что в таблице не отображаются значения:

looks like on screen

Исходный код:

def createTable(self):
    self.tableWidget = QTableWidget()

    conn = psycopg2.connect('host=localhost port=5432 dbname=postgres user=postgres password=12345678')

    cursor = conn.cursor()
    query = cursor.execute("SELECT * FROM wave_params")
    result = cursor.fetchall()
    for i in result:
        print(i)

    rows = len(result)
    columns = len(result[0])
    self.tableWidget.setColumnCount(columns)
    self.tableWidget.setRowCount(rows)

    index = 0
    while query != None:
        self.tableWidget.setItem(index,0, QTableWidgetItem(query.result[0]))
        # self.tableWidget.setItem(index, 1, QTableWidgetItem(str(query.value(1))))
        # self.tableWidget.setItem(index, 2, QTableWidgetItem(str(query.value(2))))
        index = index + 1



    # table selection change
    self.tableWidget.doubleClicked.connect(self.on_click)

@pyqtSlot()
def on_click(self):
    print("\n")
    for currentQTableWidgetItem in self.tableWidget.selectedItems():
        print(currentQTableWidgetItem.row(), currentQTableWidgetItem.column(), currentQTableWidgetItem.text())

Я не могу понять. в чем проблема? Спасибо!

0
Ingvar Medvedev 18 Июн 2017 в 20:53
 – 
ekhumoro
18 Июн 2017 в 21:29

1 ответ

Лучший ответ

Объект курсора не имеет атрибута result. в вашем коде результат - это список кортежей, содержащих возвращаемое значение cursor.fetchall(), а запрос - это возвращаемое значение cursor.execute(). cursor.execute() всегда возвращает None (см. документацию). Вам нужно всего лишь перебрать результат, вот 2 примера:

def createTable(self):
    self.tableWidget = QTableWidget(self)

    psycopg2.connect('host=localhost port=5432 dbname=postgres user=postgres password=12345678')

    cursor = conn.cursor()
    query = cursor.execute("SELECT * FROM ladestelle")
    result = cursor.fetchall()

    rows = len(result)
    columns = len(result[0])
    self.tableWidget.setColumnCount(columns)
    self.tableWidget.setRowCount(rows)

    for i, r in enumerate(result):
        self.tableWidget.setItem(i, 0, QTableWidgetItem(r[0]))
        self.tableWidget.setItem(i, 1, QTableWidgetItem(str(r[1])))
        self.tableWidget.setItem(i, 2, QTableWidgetItem(str(r[2])))
    '''
    # or simpler
    for r in range(rows):
        for c in range(columns):
            self.tableWidget.setItem(r, c, QTableWidgetItem(str(result[r][c])))
    '''

    self.tableWidget.doubleClicked.connect(self.on_click)
0
a_manthey_67 19 Июн 2017 в 17:14