Как получать данные со строки вместе с данными dateEdit?

Имеется код, который выводит данные со строки со всех столбцов, кроме тех в которых есть dataEdit, как это исправить?

main.py:

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)
        # Сохранить данные из таблицы tableWidget_3
        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):
        rows = self.tableWidget_3.rowCount()
        cols = self.tableWidget_3.columnCount()
        data = []
        for row in range(rows):
            tmp = []
            for col in range(cols):
                try:
                    tmp.append(self.tableWidget_3.item(row, col).text())
                except:
                    tmp.append('No data')
            data.append(tmp)

        data_for_word = []
        for i in data: print(i)
        
        for i in data:
            if i[0] != 'No data':
                data_for_word.append(i)


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

Пример .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>

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

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

Хочу получить данные по столбцам но, с данными из dataEdit(на скриншоте видно в первой строчке в первом столбце данных нет, а там dataEdit).


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

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

Попробуйте так:

...

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

    for i in data_for_word: print(i)

...

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

→ Ссылка