Как отобразить значения часов, минут из QTimeEdit на соответствующих ЖК-дисплеях?
Я использовал QTimeEdit для редактирования времени. Но когда я нажал "ОК", вывод получился ЧАС: 16 МИНУТА: 8, независимо от того, какое число я положил в QTimeEdit. Таким образом, я хочу знать, какую функцию я должен добавить, чтобы исправить установленное время в QTimeEdit.
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_EditTime(object):
def setupUi(self, EditTime):
EditTime.setObjectName("EditTime")
EditTime.resize(392, 293)
EditTime.setAutoFillBackground(False)
self.timeEdit = QtWidgets.QTimeEdit(EditTime)
self.timeEdit.setGeometry(QtCore.QRect(140, 160, 118, 22))
self.timeEdit.setMaximumDateTime(QtCore.QDateTime(QtCore.QDate(1999, 12, 31), QtCore.QTime(23, 59, 59)))
self.timeEdit.setMaximumDate(QtCore.QDate(1999, 12, 31))
self.timeEdit.setMinimumDate(QtCore.QDate(1999, 12, 31))
self.timeEdit.setMaximumTime(QtCore.QTime(23, 59, 59))
self.timeEdit.setMinimumTime(QtCore.QTime(00, 00, 00))
self.timeEdit.setCurrentSection(QtWidgets.QDateTimeEdit.HourSection)
self.timeEdit.setTimeSpec(QtCore.Qt.OffsetFromUTC)
self.timeEdit.setTime(QtCore.QTime(24,0,0))
self.timeEdit.setObjectName("timeEdit")
self.HourLCD = QtWidgets.QLCDNumber(EditTime)
self.HourLCD.setGeometry(QtCore.QRect(60, 70, 111, 51))
self.HourLCD.setObjectName("HourLCD")
self.MinuteLCD = QtWidgets.QLCDNumber(EditTime)
self.MinuteLCD.setGeometry(QtCore.QRect(200, 70, 111, 51))
self.MinuteLCD.setObjectName("MinuteLCD")
self.OK = QtWidgets.QPushButton(EditTime)
self.OK.setGeometry(QtCore.QRect(160, 230, 75, 23))
self.OK.setObjectName("OK")
self.label = QtWidgets.QLabel(EditTime)
self.label.setGeometry(QtCore.QRect(90, 46, 31, 20))
self.label.setObjectName("label")
self.label_2 = QtWidgets.QLabel(EditTime)
self.label_2.setGeometry(QtCore.QRect(230, 50, 47, 13))
self.label_2.setObjectName("label_2")
self.retranslateUi(EditTime)
QtCore.QMetaObject.connectSlotsByName(EditTime)
self.OK.clicked.connect(self.connect)
def connect(self):
self.HourLCD.display(self.timeEdit.HourSection)
self.MinuteLCD.display(self.timeEdit.MinuteSection)
Я ожидаю выходной базы на QTimeEdit
2 ответа
HourSection и MinuteSection представляют не время и минуту, а разделы QTimeEdit. Вместо этого вы должны получить время, используя метод time(), и используя последний, используйте hour() и minute(), чтобы получить часы и минуты соответственно.
Кроме того, вы не должны изменять код, сгенерированный Qt Designer, как указывает PyQt, вместо этого вы должны создать другой класс, который наследует от соответствующего виджета и который использует исходный класс в качестве интерфейса. Для получения дополнительной информации я рекомендую прочитать это.
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_EditTime(object):
def setupUi(self, EditTime):
EditTime.setObjectName("EditTime")
EditTime.resize(392, 293)
EditTime.setAutoFillBackground(False)
self.timeEdit = QtWidgets.QTimeEdit(EditTime)
self.timeEdit.setGeometry(QtCore.QRect(140, 160, 118, 22))
self.timeEdit.setMaximumDateTime(QtCore.QDateTime(QtCore.QDate(1999, 12, 31), QtCore.QTime(23, 59, 59)))
self.timeEdit.setMaximumDate(QtCore.QDate(1999, 12, 31))
self.timeEdit.setMinimumDate(QtCore.QDate(1999, 12, 31))
self.timeEdit.setMaximumTime(QtCore.QTime(23, 59, 59))
self.timeEdit.setMinimumTime(QtCore.QTime(00, 00, 00))
self.timeEdit.setCurrentSection(QtWidgets.QDateTimeEdit.HourSection)
self.timeEdit.setTimeSpec(QtCore.Qt.OffsetFromUTC)
self.timeEdit.setTime(QtCore.QTime(24,0,0))
self.timeEdit.setObjectName("timeEdit")
self.HourLCD = QtWidgets.QLCDNumber(EditTime)
self.HourLCD.setGeometry(QtCore.QRect(60, 70, 111, 51))
self.HourLCD.setObjectName("HourLCD")
self.MinuteLCD = QtWidgets.QLCDNumber(EditTime)
self.MinuteLCD.setGeometry(QtCore.QRect(200, 70, 111, 51))
self.MinuteLCD.setObjectName("MinuteLCD")
self.OK = QtWidgets.QPushButton(EditTime)
self.OK.setGeometry(QtCore.QRect(160, 230, 75, 23))
self.OK.setObjectName("OK")
self.label = QtWidgets.QLabel(EditTime)
self.label.setGeometry(QtCore.QRect(90, 46, 31, 20))
self.label.setObjectName("label")
self.label_2 = QtWidgets.QLabel(EditTime)
self.label_2.setGeometry(QtCore.QRect(230, 50, 47, 13))
self.label_2.setObjectName("label_2")
# self.retranslateUi(EditTime)
QtCore.QMetaObject.connectSlotsByName(EditTime)
class Widget(QtWidgets.QWidget, Ui_EditTime):
def __init__(self, parent=None):
super(Widget, self).__init__(parent)
self.setupUi(self)
self.OK.clicked.connect(self.onClicked)
@QtCore.pyqtSlot()
def onClicked(self):
t = self.timeEdit.time()
self.HourLCD.display(t.hour())
self.MinuteLCD.display(t.minute())
if __name__ == '__main__':
import sys
app = QtWidgets.QApplication(sys.argv)
w = Widget()
w.show()
sys.exit(app.exec_())
По-видимому, немного медленнее, чем eyllanesc и с достаточно значительными различиями, чтобы опубликовать его в любом случае. Замечания одинаковы.
Лично я больше за заявления об импорте, как рекомендовано документами PEP, и за надзор за наличием соединений в их собственных функциях.
import sys, time
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QApplication
class Ui_EditTime(object):
def setupUi(self, EditTime):
EditTime.setObjectName("EditTime")
EditTime.resize(392, 293)
EditTime.setAutoFillBackground(False)
self.timeEdit = QtWidgets.QTimeEdit(EditTime)
self.timeEdit.setGeometry(QtCore.QRect(140, 160, 118, 22))
self.timeEdit.setMaximumDateTime(QtCore.QDateTime(QtCore.QDate(1999, 12, 31), QtCore.QTime(23, 59, 59)))
self.timeEdit.setMaximumDate(QtCore.QDate(1999, 12, 31))
self.timeEdit.setMinimumDate(QtCore.QDate(1999, 12, 31))
self.timeEdit.setMaximumTime(QtCore.QTime(23, 59, 59))
self.timeEdit.setMinimumTime(QtCore.QTime(00, 00, 00))
self.timeEdit.setCurrentSection(QtWidgets.QDateTimeEdit.HourSection)
self.timeEdit.setTimeSpec(QtCore.Qt.OffsetFromUTC)
self.timeEdit.setTime(QtCore.QTime(24,0,0))
self.timeEdit.setObjectName("timeEdit")
self.HourLCD = QtWidgets.QLCDNumber(EditTime)
self.HourLCD.setGeometry(QtCore.QRect(60, 70, 111, 51))
self.HourLCD.setObjectName("HourLCD")
self.MinuteLCD = QtWidgets.QLCDNumber(EditTime)
self.MinuteLCD.setGeometry(QtCore.QRect(200, 70, 111, 51))
self.MinuteLCD.setObjectName("MinuteLCD")
self.OK = QtWidgets.QPushButton(EditTime)
self.OK.setGeometry(QtCore.QRect(160, 230, 75, 23))
self.OK.setObjectName("OK")
self.label = QtWidgets.QLabel(EditTime)
self.label.setGeometry(QtCore.QRect(90, 46, 31, 20))
self.label.setObjectName("label")
self.label_2 = QtWidgets.QLabel(EditTime)
self.label_2.setGeometry(QtCore.QRect(230, 50, 47, 13))
self.label_2.setObjectName("label_2")
self.retranslateUi(EditTime)
QtCore.QMetaObject.connectSlotsByName(EditTime)
def retranslateUi(self, EditTime):
_translate = QtCore.QCoreApplication.translate
class EditTime(QtWidgets.QWidget, Ui_EditTime):
def __init__(self, parent=None):
super(EditTime, self).__init__(parent) # make flexible MainWindow class.
self.setupUi(self)
self.connections() # oversight off all your connections there are made in your application.
def connections(self):
self.OK.clicked.connect(self.connect)
def connect(self):
t_mod = self.timeEdit.time()
self.HourLCD.display(t_mod.hour())
self.MinuteLCD.display(t_mod.minute())
if __name__ == '__main__':
print ('Starting QTimeEdit application')
sys.stdout.flush() # shows output directly in an editor.
app = QApplication(sys.argv)
window = EditTime()
window.show()
sys.exit(app.exec_())