Подсчет общего времени в 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.ui", self)


        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)

    def date_changed(self, dateTime, row):

        if row == 0:
            dateTime1 = self.tableWidget_3.cellWidget(row, 0).dateTime()
            dateTime2 = self.tableWidget_3.cellWidget(row + 1, 0).dateTime()
            item = QTableWidgetItem()
            item.setData(Qt.DisplayRole, dateTime1.secsTo(dateTime2) / 60. / 60.)
            self.tableWidget_3.setItem(row + 1, 1, item)
            return

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

        if row != self.tableWidget_3.rowCount() - 1:
            dateTime1 = self.tableWidget_3.cellWidget(row, 0).dateTime()
            dateTime2 = self.tableWidget_3.cellWidget(row + 1, 0).dateTime()
            item = QTableWidgetItem()
            item.setData(Qt.DisplayRole, dateTime1.secsTo(dateTime2) / 60. / 60.)
            self.tableWidget_3.setItem(row + 1, 1, item)


    def buttonLoader(self):
        pass
        data_for_word = []
        rows = self.tableWidget_3.rowCount()
        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_())

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

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

Я отметил для вас блок, который надо изменить.

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.ui", self)

        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)
            
# +++ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv            
        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)

# +++ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

    def buttonLoader(self):
        pass
        data_for_word = []
        rows = self.tableWidget_3.rowCount()
        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_())

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>320</width>
    <height>240</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>MainWindow</string>
  </property>
  <widget class="QWidget" name="centralwidget">
   <layout class="QGridLayout" name="gridLayout">
    <item row="0" column="0">
     <widget class="QTableWidget" name="tableWidget_3">
      <row>
       <property name="text">
        <string>1</string>
       </property>
      </row>
      <row>
       <property name="text">
        <string>2</string>
       </property>
      </row>
      <row>
       <property name="text">
        <string>3</string>
       </property>
      </row>
      <column>
       <property name="text">
        <string>1</string>
       </property>
      </column>
      <column>
       <property name="text">
        <string>2</string>
       </property>
      </column>
     </widget>
    </item>
   </layout>
  </widget>
  <widget class="QMenuBar" name="menubar">
   <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
     <width>320</width>
     <height>21</height>
    </rect>
   </property>
  </widget>
  <widget class="QStatusBar" name="statusbar"/>
 </widget>
 <resources/>
 <connections/>
</ui>

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

→ Ссылка