Как взаимодействовать с многими елементами QTimeEdit циклом в python

В моей программе есть очень много элементов QTextEdit. Я хочу циклом считывать и выводить на них время, но не знаю как это сделать, не писать же мне код для каждого QtextEdit.

from PyQt5 import QtCore, QtGui, QtWidgets

times=[]

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(225, 356)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.timeEdit_1 = QtWidgets.QTimeEdit(self.centralwidget)
        self.timeEdit_1.setGeometry(QtCore.QRect(30, 20, 118, 22))
        self.timeEdit_1.setObjectName("timeEdit")
        self.timeEdit_2 = QtWidgets.QTimeEdit(self.centralwidget)
        self.timeEdit_2.setGeometry(QtCore.QRect(30, 60, 118, 22))
        self.timeEdit_2.setObjectName("timeEdit_2")
        self.timeEdit_3 = QtWidgets.QTimeEdit(self.centralwidget)
        self.timeEdit_3.setGeometry(QtCore.QRect(30, 110, 118, 22))
        self.timeEdit_3.setObjectName("timeEdit_3")
        self.timeEdit_4 = QtWidgets.QTimeEdit(self.centralwidget)
        self.timeEdit_4.setGeometry(QtCore.QRect(30, 160, 118, 22))
        self.timeEdit_4.setObjectName("timeEdit_4")
        self.timeEdit_5 = QtWidgets.QTimeEdit(self.centralwidget)
        self.timeEdit_5.setGeometry(QtCore.QRect(30, 210, 118, 22))
        self.timeEdit_5.setObjectName("timeEdit_5")
        self.timeEdit_6 = QtWidgets.QTimeEdit(self.centralwidget)
        self.timeEdit_6.setGeometry(QtCore.QRect(30, 260, 118, 22))
        self.timeEdit_6.setObjectName("timeEdit_6")
        MainWindow.setCentralWidget(self.centralwidget)
        
        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

        self.read_loop()

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.timeEdit_1.setDisplayFormat(_translate("MainWindow", "HH:mm:ss"))
        self.timeEdit_2.setDisplayFormat(_translate("MainWindow", "HH:mm:ss"))
        self.timeEdit_3.setDisplayFormat(_translate("MainWindow", "HH:mm:ss"))
        self.timeEdit_4.setDisplayFormat(_translate("MainWindow", "HH:mm:ss"))
        self.timeEdit_5.setDisplayFormat(_translate("MainWindow", "HH:mm:ss"))
        self.timeEdit_6.setDisplayFormat(_translate("MainWindow", "HH:mm:ss"))

    def read_loop(self):
        for i in range(6):
            t = self.timeEdit_+i.time()                            #Хочу получить время с timeEdit_[i]
            times.append(t.hour()+":"+t.minute()+":"+t.second())    #Добавляю время с timeEdit в список

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_())

Я понимаю что мой, код таким как я его написал, не может работать, я просто хочу показать чего я хочу добится.


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

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

Не изменяйте код, сгенерированный Qt Designer. Создайте другой класс, который наследуется от соответствующего виджета, и используйте созданный класс для его заполнения.

Самый простой способ - создать список объектов QTimeEdit.

from PyQt5 import QtCore, QtGui, QtWidgets

# times=[]

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(225, 356)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.timeEdit_1 = QtWidgets.QTimeEdit(self.centralwidget)
        self.timeEdit_1.setGeometry(QtCore.QRect(30, 20, 118, 22))
        self.timeEdit_1.setObjectName("timeEdit")
        self.timeEdit_2 = QtWidgets.QTimeEdit(self.centralwidget)
        self.timeEdit_2.setGeometry(QtCore.QRect(30, 60, 118, 22))
        self.timeEdit_2.setObjectName("timeEdit_2")
        self.timeEdit_3 = QtWidgets.QTimeEdit(self.centralwidget)
        self.timeEdit_3.setGeometry(QtCore.QRect(30, 110, 118, 22))
        self.timeEdit_3.setObjectName("timeEdit_3")
        self.timeEdit_4 = QtWidgets.QTimeEdit(self.centralwidget)
        self.timeEdit_4.setGeometry(QtCore.QRect(30, 160, 118, 22))
        self.timeEdit_4.setObjectName("timeEdit_4")
        self.timeEdit_5 = QtWidgets.QTimeEdit(self.centralwidget)
        self.timeEdit_5.setGeometry(QtCore.QRect(30, 210, 118, 22))
        self.timeEdit_5.setObjectName("timeEdit_5")
        self.timeEdit_6 = QtWidgets.QTimeEdit(self.centralwidget)
        self.timeEdit_6.setGeometry(QtCore.QRect(30, 260, 118, 22))
        self.timeEdit_6.setObjectName("timeEdit_6")
        MainWindow.setCentralWidget(self.centralwidget)
        
        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

#        self.read_loop()

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.timeEdit_1.setDisplayFormat(_translate("MainWindow", "HH:mm:ss"))
        self.timeEdit_2.setDisplayFormat(_translate("MainWindow", "HH:mm:ss"))
        self.timeEdit_3.setDisplayFormat(_translate("MainWindow", "HH:mm:ss"))
        self.timeEdit_4.setDisplayFormat(_translate("MainWindow", "HH:mm:ss"))
        self.timeEdit_5.setDisplayFormat(_translate("MainWindow", "HH:mm:ss"))
        self.timeEdit_6.setDisplayFormat(_translate("MainWindow", "HH:mm:ss"))


class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        
        self.listTimeEdit = [                                       # +++
            self.timeEdit_1, self.timeEdit_2, self.timeEdit_3,      # +++
            self.timeEdit_4, self.timeEdit_5, self.timeEdit_6,      # +++
        ]                                                           # +++
        self.times = []
        
        button = QtWidgets.QPushButton("Click Me", clicked=self.read_loop)
        
        layout = QtWidgets.QVBoxLayout(self.centralwidget)
        layout.addWidget(self.timeEdit_1) 
        layout.addWidget(self.timeEdit_2) 
        layout.addWidget(self.timeEdit_3) 
        layout.addWidget(self.timeEdit_4) 
        layout.addWidget(self.timeEdit_5) 
        layout.addWidget(self.timeEdit_6) 
        layout.addWidget(button ) 
        
        self.read_loop()

    def read_loop(self):
        self.times = []
        for timeEdit in self.listTimeEdit:   # range(6):
#            t = self.timeEdit_+i.time()                  # Хочу получить время с timeEdit_[i]
            t = timeEdit.time() 
            self.times.append(
                f'{t.hour()}:{t.minute()}:{t.second()}' 
            )                                             # Добавляю время с timeEdit в список
        print(* self.times, sep='\n')


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
#    MainWindow = QtWidgets.QMainWindow()
#    ui = Ui_MainWindow()
#    ui.setupUi(MainWindow)
#    MainWindow.show()
    w = MainWindow()
    w.show()
    sys.exit(app.exec_())
    

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

→ Ссылка