Проблема с считыванием данных из tableWidget

Имеется код:

import sys
from PyQt5.QtWidgets import QApplication
from PyQt5.QtWidgets import QWidget, QLabel
from PyQt5 import uic
from PyQt5.QtWidgets import QMainWindow
from PyQt5 import QtCore, QtWidgets
from PyQt5.Qt import *


class Widget(QMainWindow):
    def __init__(self):
        super().__init__()
        uic.loadUi("UI_lke2.1.ui", self)
        # Добавить/удалить строку в tableWidget_2
        self.pushButton_7.clicked.connect(self.buttonAdd)
        self.pushButton_8.clicked.connect(self.buttonDelete)
        # Добавить/удалить строку в tableWidget_3
        self.pushButton_9.clicked.connect(self.buttonAdd_2)
        self.pushButton_10.clicked.connect(self.buttonDelete_2)
        #
        self.pushButton.clicked.connect(self.buttonSave)

        for row in range(self.tableWidget_3.rowCount()):
            date_from = QtWidgets.QDateTimeEdit()
            date_from.setDateTime(
                QtCore.QDateTime(QtCore.QDate(2021, 8, 26),
                                 QtCore.QTime(15, 0, 0))
            )
            self.tableWidget_3.setCellWidget(row, 0, date_from)

        for row in range(self.tableWidget_3.rowCount()):
            date_from = QDateTimeEdit()
            date_from.setDateTime(
                QDateTime(QDate(2021, 9, 2))
            )
            date_from.dateTimeChanged.connect(
                lambda dateTime, row=row: self.date_changed(dateTime, row))
            self.tableWidget_3.setCellWidget(row, 0, date_from)

        self.dateTime0 = self.tableWidget_3.cellWidget(0, 0).dateTime()

    # Расчет времени от начального значения
    def date_changed(self, dateTime, row):
        if row == 0:
            self.dateTime0 = self.tableWidget_3.cellWidget(row, 0).dateTime()
            for row in range(1, self.tableWidget_3.rowCount()):
                dateTime2 = self.tableWidget_3.cellWidget(row, 0).dateTime()
                item = QTableWidgetItem()
                item.setData(Qt.DisplayRole,
                             self.dateTime0.secsTo(dateTime2) / 60. / 60.)
                self.tableWidget_3.setItem(row, 1, item)
            return

        dateTime2 = self.tableWidget_3.cellWidget(row, 0).dateTime()
        item = QTableWidgetItem()
        item.setData(Qt.DisplayRole,
                     self.dateTime0.secsTo(dateTime2) / 60. / 60.)
        self.tableWidget_3.setItem(row, 1, item)

    # Кнопка дабовляющая строку в таблицу tableWidget_2
    def buttonAdd(self):
        rowPosition = self.tableWidget_2.rowCount()
        self.tableWidget_2.insertRow(rowPosition)

    # Кнопка удаляющая строку в таблицу tableWidget_2
    def buttonDelete(self):
        if self.tableWidget_2.rowCount() > 0:
            self.tableWidget_2.removeRow(self.tableWidget_2.rowCount()-1)

    # Кнопка дабовляющая строку в таблицу tableWidget_3
    def buttonAdd_2(self):
        rowPosition = self.tableWidget_3.rowCount()
        self.tableWidget_3.insertRow(rowPosition)
        date_from = QtWidgets.QDateTimeEdit()
        dateTime = QtCore.QDateTime().currentDateTime()
        date_from.setDateTime(dateTime)
        date_from.dateTimeChanged.connect(
            lambda dateTime, row=rowPosition:
            self.date_changed(dateTime, row))
        self.tableWidget_3.setCellWidget(rowPosition, 0, date_from)

    # Кнопка удаляющая строку в таблицу tableWidget_3
    def buttonDelete_2(self):
        if self.tableWidget_3.rowCount() > 0:
            self.tableWidget_3.removeRow(self.tableWidget_2.rowCount() - 1)

    # Сохранение данных из tableWidget_3
    def buttonSave(self):
        data_for_word = []
        rows = self.tableWidget_3.rowCount()
        self.cols = self.tableWidget_3.columnCount()
        for row in range(rows):
            dateTime = self.tableWidget_3.cellWidget(row, 0). \
                dateTime().toString('dd.MM.yyyy hh:mm')
            item = self.tableWidget_3.item(row, 1)
            _data = item.data(Qt.DisplayRole)
            data_for_word.append([dateTime, _data])

        print(f'\n{data_for_word}\n')
        print(*data_for_word, sep='\n')


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

Который по нажатию на кнопку pushButton должен сохранять данные из таблицы в массив, но этого не происходит. В cmd показывает ошибку:

Unknown property Heaigth
Unknown property Heaigth
Unknown property Heaigth
Traceback (most recent call last):
  File "G:\PyCharm\Gui_╧ЁюуЁрьь√\Python\═ютр  яряър\SL_lke2.py", line 96, in buttonSave
    _data = item.data(Qt.DisplayRole)
AttributeError: 'NoneType' object has no attribute 'data'

Как решить данную проблему?

Пример заполнения:

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

UI_lke2.ui

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>MainWindow</class>
 <widget class="QMainWindow" name="MainWindow">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>640</width>
    <height>480</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>MainWindow</string>
  </property>
  <widget class="QWidget" name="centralwidget">
   <layout class="QGridLayout" name="gridLayout">
    <item row="2" column="0">
     <layout class="QHBoxLayout" name="horizontalLayout">
      <item>
       <widget class="QPushButton" name="pushButton_10">
        <property name="text">
         <string>Удалить</string>
        </property>
       </widget>
      </item>
      <item>
       <widget class="QPushButton" name="pushButton_9">
        <property name="text">
         <string>Добавить</string>
        </property>
       </widget>
      </item>
     </layout>
    </item>
    <item row="0" column="0">
     <widget class="QTableWidget" name="tableWidget_3">
      <row>
       <property name="text">
        <string>New Row</string>
       </property>
      </row>
      <column>
       <property name="text">
        <string>1</string>
       </property>
      </column>
      <column>
       <property name="text">
        <string>2</string>
       </property>
      </column>
      <column>
       <property name="text">
        <string>3</string>
       </property>
      </column>
      <column>
       <property name="text">
        <string>4</string>
       </property>
      </column>
      <column>
       <property name="text">
        <string>5</string>
       </property>
      </column>
      <column>
       <property name="text">
        <string>6</string>
       </property>
      </column>
      <column>
       <property name="text">
        <string>7</string>
       </property>
      </column>
      <column>
       <property name="text">
        <string>8</string>
       </property>
      </column>
      <column>
       <property name="text">
        <string>9</string>
       </property>
      </column>
     </widget>
    </item>
    <item row="1" column="0">
     <widget class="QPushButton" name="pushButton">
      <property name="text">
       <string>Считать данные</string>
      </property>
     </widget>
    </item>
   </layout>
  </widget>
  <widget class="QMenuBar" name="menubar">
   <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
     <width>640</width>
     <height>21</height>
    </rect>
   </property>
  </widget>
  <widget class="QStatusBar" name="statusbar"/>
 </widget>
 <resources/>
 <connections/>
</ui>

Ответы (1 шт):

Автор решения: S. Nick

Вы предоставили модуль UI_lke2.ui, который не соответствует переменным модуля main.py. Пожалуйста будьте внимательнее и прежде чем опубликовать вопрос, проверяйте чтобы ваше приложение запускалось.

Ошибка в том, что ячейка 2 в строке New Row - пустая.

Результат строки item = self.tableWidget_3.item(row, 1) - None,
а None не имеет атрибута data, о чем вам и сообщается:

AttributeError: 'NoneType' object has no attribute 'data'

Замените строку:

_data = item.data(Qt.DisplayRole)

на

_data = item.data(Qt.DisplayRole) if item else 0 
→ Ссылка