Подсчет общего времени в 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>

