Как взаимодействовать с многими елементами 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_())
