Выравнивание QTableWidgetItem приводит к тому, что item становится None

Я создал таблицу в PyQt5 и заполнил ее аналогично тому, как это делается в этом сообщении. Я хочу выровнять по центру все ячейки, но когда я пытаюсь выровнять каждую ячейку, мой QTableWidgetItem становится None.

Согласно документам setTextAlignment(QtCore.Qt.AlignVCenter | QtCore.Qt.AlignHCenter) должно работать. См. также здесь

Вот рабочий пример, где self.db_table — это QTableWidget.

for row in rows:
    inx = rows.index(row)
    self.db_table.insertRow(inx)
    self.db_table.setItem(inx, 0, QTableWidgetItem(str(row[0])))
    self.db_table.setItem(inx, 1, QTableWidgetItem(str(row[1])))
    self.db_table.setItem(inx, 2, QTableWidgetItem(str(row[2])))
    self.db_table.setItem(inx, 3, QTableWidgetItem(str(row[3])))
    self.db_table.setItem(inx, 4, QTableWidgetItem(str(row[4])))

И когда я добавляю setTextAlignment(), он делает все QTableWidgetItems None:

for row in rows:
    inx = rows.index(row)
    self.db_table.insertRow(inx)
    self.db_table.setItem(inx, 0, QTableWidgetItem(str(row[0])).setTextAlignment(QtCore.Qt.AlignVCenter | QtCore.Qt.AlignHCenter))
    self.db_table.setItem(inx, 1, QTableWidgetItem(str(row[1])).setTextAlignment(QtCore.Qt.AlignVCenter | QtCore.Qt.AlignHCenter))
    self.db_table.setItem(inx, 2, QTableWidgetItem(str(row[2])).setTextAlignment(QtCore.Qt.AlignVCenter | QtCore.Qt.AlignHCenter))
    self.db_table.setItem(inx, 3, QTableWidgetItem(str(row[3])).setTextAlignment(QtCore.Qt.AlignVCenter | QtCore.Qt.AlignHCenter))
    self.db_table.setItem(inx, 4, QTableWidgetItem(str(row[4])).setTextAlignment(QtCore.Qt.AlignVCenter | QtCore.Qt.AlignHCenter))

Есть ли причина, почему это не работает?


person N.Zano    schedule 07.11.2017    source источник


Ответы (1)


метод setTextAlignment() не возвращает никаких параметров, и это равно None, а затем вы передаете None в setItem, что вы должны сделать, это создать элемент как item = QTableWidgetItem({}), а затем использовать item.setTextAlignment({}) и в конце добавить его self.db_table.setItem(inx, 0, item) для каждого элемента, сокращенная форма заключается в следующем:

for row in rows:
    inx = rows.index(row)
    self.db_table.insertRow(inx)
    for i, v in zip(range(5), row):
        item = QTableWidgetItem(str(v))
        item.setTextAlignment(QtCore.Qt.AlignVCenter | QtCore.Qt.AlignHCenter)
        self.db_table.setItem(inx, i, item)
person eyllanesc    schedule 07.11.2017
comment
Отличное решение, оно мне очень помогло, спасибо @eyllanesc. - person DaniV; 28.08.2020