Преобразование PyQt5 TimeEdit в формат даты и времени Python 3.7
У меня есть простая программа, рассчитывающая рабочее время с помощью функции datetime. Теперь я пытаюсь преобразовать это в приложение PyQt5. Я пытаюсь использовать функцию TimeEdit в качестве ввода для времени начала, окончания и обеда. Моя проблема в том, как преобразовать значения Qtime в значения datetime, из которых я могу вычислить timedelta. Я пробовал функции toPyDateTime() и toPython(), но получаю такие ошибки, как: объект "QTime" не имеет атрибута "toPython". Я гуглил часами, но не нашел решения. И да, я новичок в Python и Stackru, поэтому, пожалуйста, не будьте слишком суровы со мной.
Мое приложение cli:
from datetime import *
from re import *
pattern = compile('(^(2[0-3]|[01]?[0-9]):([0-5]?[0-9])$)')
while True:
# Function for input validetion of time.
def get_time(text):
while True:
time_str = input(text)
is_valid = pattern.match(time_str)
if is_valid:
break
else:
print('Invalid time format! Please retry..\n')
return datetime.strptime(time_str, '%H:%M')
Day_start = get_time('Enter start time HH:MM ')
Day_end = get_time('Enter end time HH:MM ')
time_value = get_time('Enter lunch HH:MM ')
lunch = timedelta(hours = time_value.hour, minutes = time_value.minute)
# Calculate work time.
difference = Day_end - Day_start - lunch
print('\nWork Time:', difference)
cmd = input('Press q to exit:')
if cmd == 'q':
break
Мое приложение PyQt5.
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'time_02.ui'
#
# Created by: PyQt5 UI code generator 5.13.0
#
# WARNING! All changes made in this file will be lost!
from PyQt5 import QtCore, QtGui, QtWidgets
from datetime import *
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(800, 600)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.FromTime = QtWidgets.QTimeEdit(self.centralwidget)
self.FromTime.setGeometry(QtCore.QRect(100, 40, 118, 22))
self.FromTime.setObjectName("FromTime")
self.Submit = QtWidgets.QPushButton(self.centralwidget)
self.Submit.setGeometry(QtCore.QRect(290, 40, 75, 23))
self.Submit.setObjectName("Submit")
self.FT_HourLCD = QtWidgets.QLCDNumber(self.centralwidget)
self.FT_HourLCD.setGeometry(QtCore.QRect(100, 190, 64, 23))
self.FT_HourLCD.setObjectName("FT_HourLCD")
self.FT_MinuteLCD = QtWidgets.QLCDNumber(self.centralwidget)
self.FT_MinuteLCD.setGeometry(QtCore.QRect(170, 190, 64, 23))
self.FT_MinuteLCD.setObjectName("FT_MinuteLCD")
self.From_Time_label = QtWidgets.QLabel(self.centralwidget)
self.From_Time_label.setGeometry(QtCore.QRect(20, 40, 71, 16))
font = QtGui.QFont()
font.setPointSize(10)
font.setBold(True)
font.setWeight(75)
self.From_Time_label.setFont(font)
self.From_Time_label.setObjectName("From_Time_label")
self.EndTime = QtWidgets.QTimeEdit(self.centralwidget)
self.EndTime.setGeometry(QtCore.QRect(100, 80, 118, 22))
self.EndTime.setObjectName("EndTime")
self.End_time_label = QtWidgets.QLabel(self.centralwidget)
self.End_time_label.setGeometry(QtCore.QRect(20, 80, 61, 16))
font = QtGui.QFont()
font.setPointSize(10)
font.setBold(True)
font.setWeight(75)
self.End_time_label.setFont(font)
self.End_time_label.setObjectName("End_time_label")
self.Lunch = QtWidgets.QTimeEdit(self.centralwidget)
self.Lunch.setGeometry(QtCore.QRect(100, 120, 118, 22))
self.Lunch.setObjectName("Lunch")
self.Lunch_label = QtWidgets.QLabel(self.centralwidget)
self.Lunch_label.setGeometry(QtCore.QRect(20, 120, 71, 16))
font = QtGui.QFont()
font.setPointSize(10)
font.setBold(True)
font.setWeight(75)
self.Lunch_label.setFont(font)
self.Lunch_label.setObjectName("Lunch_label")
self.ET_HourLCD = QtWidgets.QLCDNumber(self.centralwidget)
self.ET_HourLCD.setGeometry(QtCore.QRect(100, 230, 64, 23))
self.ET_HourLCD.setObjectName("ET_HourLCD")
self.ET_MinuteLCD = QtWidgets.QLCDNumber(self.centralwidget)
self.ET_MinuteLCD.setGeometry(QtCore.QRect(170, 230, 64, 23))
self.ET_MinuteLCD.setObjectName("ET_MinuteLCD")
self.Lunch_HourLCD = QtWidgets.QLCDNumber(self.centralwidget)
self.Lunch_HourLCD.setGeometry(QtCore.QRect(100, 270, 64, 23))
self.Lunch_HourLCD.setObjectName("Lunch_HourLCD")
self.Lunch_MinuteLCD = QtWidgets.QLCDNumber(self.centralwidget)
self.Lunch_MinuteLCD.setGeometry(QtCore.QRect(170, 270, 64, 23))
self.Lunch_MinuteLCD.setObjectName("Lunch_MinuteLCD")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 21))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
# **Inserted line to activate submit button.
self.Submit.clicked.connect(self.pressed)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.Submit.setText(_translate("MainWindow", "Submit"))
self.From_Time_label.setText(_translate("MainWindow", "From Time"))
self.End_time_label.setText(_translate("MainWindow", "End Time"))
self.Lunch_label.setText(_translate("MainWindow", "Lunch"))
# **Test to see the values for From, Lunch and End time.
def pressed(self):
# print(self.FromTime.time())
# From Time
FT = self.FromTime.time()
self.FT_HourLCD.display(FT.hour())
self.FT_MinuteLCD.display(FT.minute())
# End Time
ET = self.EndTime.time()
self.ET_HourLCD.display(ET.hour())
self.ET_MinuteLCD.display(ET.minute())
# Lunch
LT = self.Lunch.time()
self.Lunch_HourLCD.display(LT.hour())
self.Lunch_MinuteLCD.display(LT.minute())
# **Test to calculate time delta.
# diff = ET - FT - LT
# **Test to convert to python datetime function
P_FT = FT.toPython()
# print('Work Time:', diff)
print('From Time ', P_FT)
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
С уважением, LasseAH