# https://stackoverflow.com/questions/3077192/get-a-layouts-widgets-in-pyqt from PyQt5.QtWidgets import ( QDialog, QGroupBox, QLabel, QLineEdit, QVBoxLayout, QHBoxLayout, QPushButton, QComboBox, QMessageBox ) from src.database.dbuser import DbUser from src.database.dbsearch import DbSearch def core_add_job(jobName: str, jobId: int, listMyJobs: list, layMyJobs: object) -> None: """""" if jobId not in listMyJobs: listMyJobs.append(jobId) lineMyJobs: object = QHBoxLayout() labJob: object = QLabel(jobName) btnRemoveJob: object = QPushButton("Supprimer") btnRemoveJob.clicked.connect( lambda checked, jId=jobId, layItem=lineMyJobs: [ listMyJobs.remove(jId), core_delete_job(layItem) ] ) lineMyJobs.addWidget(labJob) lineMyJobs.addStretch() lineMyJobs.addWidget(btnRemoveJob) layMyJobs.addLayout(lineMyJobs) def core_delete_job(layLineJob: object) -> None: """""" lab: object = layLineJob.itemAt(0).widget() lab.deleteLater() btn: object = layLineJob.itemAt(2).widget() btn.deleteLater() layLineJob.deleteLater() def core_validate(mainWindow: object, dial: object, layLines: list, oldJobs: list = None, newJobs: list = None) -> None: """""" user: object = DbUser(mainWindow = mainWindow) userInfos: list = [] for i in layLines: if i != "selectJobs" and i != "myJobs": lineInput: object = layLines[i].itemAt(2).widget() userInfos.append(lineInput.text()) if mainWindow.userStatus == "Pro": isPro: bool = True else: isPro: bool = False if "" in userInfos: QMessageBox.warning( dial, "Mes informations", "Veuillez renseigner tous les champs" ) return user.update_user_infos(userInfos, mainWindow.userId, isPro, oldJobs, newJobs) QMessageBox.information( dial, "Mes informations", "Modification enregistrée" ) def window_main(mainWindow: object) -> None: search: object = DbSearch(mainWindow) dial: object = QDialog(parent=mainWindow) dial.setWindowTitle("Mes infos") infos: list = search.get_user_info_by_userid(mainWindow.userId) if infos: champsClients: dict = { "Nom": infos[0][1], "Prénom": infos[0][2], "Téléphone": infos[0][6], "Addresse": infos[0][7], "Code postal": infos[0][8], "ville": infos[0][9] } champsPro: dict = { "Diplôme": infos[0][3], "Capacités": infos[0][4], "Description": infos[0][5] } else: champsClients: list = [ "Nom", "Prénom", "Téléphone", "Addresse", "Code postal", "ville" ] champsPro: list =[ "Diplôme", "Capacités", "Description" ] layLines: list = {} for i in champsClients: layLines[i] = QHBoxLayout() layLines[i].addWidget(QLabel(i)) layLines[i].addStretch() if infos: if i == "Téléphone": layLines[i].addWidget(QLineEdit(champsClients[i], maxLength=10)) elif i == "Code postal": layLines[i].addWidget(QLineEdit(champsClients[i], maxLength=6)) else: layLines[i].addWidget(QLineEdit(champsClients[i], maxLength=128)) else: if i == "Téléphone": layLines[i].addWidget(QLineEdit(maxLength=10)) elif i == "Code postal": layLines[i].addWidget(QLineEdit(maxLength=6)) else: layLines[i].addWidget(QLineEdit(maxLength=128)) if mainWindow.userStatus == "Pro": allJobs: object = search.get_job_all() laySelectJobs: object = QHBoxLayout() labSelectJobs: object = QLabel("Les emplois:") cmbAllJobs: object = QComboBox() for i in allJobs: cmbAllJobs.addItem(f"{i[2]}", i[0]) btnSelectJobs = QPushButton("Ajouter") btnSelectJobs.clicked.connect( lambda : core_add_job( cmbAllJobs.currentText(), cmbAllJobs.currentData(), newJobs, layMyJobs ) ) laySelectJobs.addWidget(labSelectJobs) laySelectJobs.addStretch() laySelectJobs.addWidget(cmbAllJobs) laySelectJobs.addStretch() laySelectJobs.addWidget(btnSelectJobs) layLines["selectJobs"] = laySelectJobs # myJobs: object = search.get_pro_job_by_proid(mainWindow.userId) layMyJobs: object = QVBoxLayout() newJobs: list = [] for i in myJobs: core_add_job(i[2], i[0], newJobs, layMyJobs) oldJobs: list = newJobs.copy() # Sinon pointer !!! layLines["myJobs"] = layMyJobs for i in champsPro: layLines[i] = QHBoxLayout() layLines[i].addWidget(QLabel(i)) layLines[i].addStretch() if infos: layLines[i].addWidget(QLineEdit(champsPro[i], maxLength=256)) else: layLines[i].addWidget(QLineEdit(maxLength=256)) layModif: object = QVBoxLayout() for i in layLines: layModif.addLayout(layLines[i]) btnModif: object = QPushButton("modifer") btnModif.clicked.connect( lambda: core_validate( mainWindow, dial, layLines, oldJobs, newJobs ) if mainWindow.userStatus == "Pro" else core_validate( mainWindow, dial, layLines ) ) layBtn: object = QHBoxLayout() layBtn.addStretch() layBtn.addWidget(btnModif) layModif.addLayout(layBtn) # grpMain: object = QGroupBox("Mes infos") grpMain.setLayout(layModif) mainLayout: object = QVBoxLayout() mainLayout.addWidget(grpMain) dial.setLayout(mainLayout) dial.show()