Как отобразить значения часов, минут из QTimeEdit на соответствующих ЖК-дисплеях? - PullRequest
1 голос
/ 23 мая 2019

Я использовал 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 ]

1 голос
/ 23 мая 2019

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_())
0 голосов
/ 23 мая 2019

Очевидно, немного медленнее, чем 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_())
...