# https://docs.python.org/3/faq/programming.html#why-do-lambdas-defined-in-a-loop-with-different-values-all-return-the-same-result # https://stackoverflow.com/questions/53751106/create-lambda-functions-in-a-loop-for-pyqt5-signals?noredirect=1 from PyQt5.QtWidgets import ( QDialog, QVBoxLayout, QHBoxLayout, QLabel, QPushButton, QGroupBox, QComboBox, QLineEdit, QMessageBox ) from src.database.dbsearch import DbSearch from src.database.dbmission import DbMission def core_mandater(mainWindow: object, dial: object, proId: int) -> None: """""" dbmission: object = DbMission(mainWindow) dbsearch: object = DbSearch(mainWindow) proJobs: list = dbsearch.get_pro_job_by_proid(proId) dial: object = QDialog(dial) labInpMandate: object = QLabel("Sujet de la mission:") inpMandate: object = QLineEdit(maxLength=128) layInpMandate: object = QHBoxLayout() layInpMandate.addWidget(labInpMandate) layInpMandate.addStretch() layInpMandate.addWidget(inpMandate) labCmbMandate: object = QLabel("Profession concernée:") cmbMandate: object = QComboBox() layCmbMandate: object = QHBoxLayout() for i in proJobs: cmbMandate.addItem(f"{i[2]}", i[0]) layCmbMandate.addWidget(labCmbMandate) layCmbMandate.addStretch() layCmbMandate.addWidget(cmbMandate) btnMandate = QPushButton("Mandater") btnMandate.clicked.connect( lambda: [ dbmission.register_mission( inpMandate.text(), mainWindow.userId, proId, cmbMandate.currentData() ), QMessageBox.information( dial, "Mandater une mission", "Votre mission à bien été mandatée" ), dial.close() ] ) layBtnMandate: object = QHBoxLayout() layBtnMandate.addStretch() layBtnMandate.addWidget(btnMandate) layBtnMandate.addStretch() layGrp: object = QVBoxLayout() layGrp.addLayout(layInpMandate) layGrp.addLayout(layCmbMandate) layGrp.addLayout(layBtnMandate) grpMandate: object = QGroupBox() grpMandate.setLayout(layGrp) layMain: object = QVBoxLayout() layMain.addWidget(grpMandate) dial.setLayout(layMain) dial.show() def core_more_infos(mainWindow: object, dial: object, proId: int) -> None: """""" dial: object = QDialog(dial) search: object = DbSearch(mainWindow) resRecherche: list = search.get_user_info_by_userid(proId)[0][1:] labelsText: list = [ "Nom", "Prénom", "Diplôme", "Capacités", "Description", "Téléphone", "Adresse", "Code postale", "Ville", ] layProInfo = QVBoxLayout() for i in range(len(resRecherche)): line: object = QHBoxLayout() line.addWidget(QLabel(f"{labelsText[i]}: {resRecherche[i]}")) layProInfo.addLayout(line) if mainWindow.userStatus == "Client": layBtnMandate: object = QHBoxLayout() btnMandate: object = QPushButton("Mandater") btnMandate.clicked.connect( lambda: core_mandater(mainWindow, dial, proId) ) layBtnMandate.addStretch() layBtnMandate.addWidget(btnMandate) layBtnMandate.addStretch() layProInfo.addLayout(layBtnMandate) grpProInfo: object = QGroupBox() grpProInfo.setLayout(layProInfo) layMain: object = QVBoxLayout() layMain.addWidget(grpProInfo) dial.setLayout(layMain) dial.show() def window_main(mainWindow: object, results: list) -> None: """""" dial: object = QDialog(parent=mainWindow) dial.setWindowTitle("Recherche") layoutsResult: list = [] for i in results: layoutLine = QHBoxLayout() color = results.index(i) % 2 if color: colored = QLabel(i["text"]) colored.setStyleSheet("background-color: rgb(230,200,200); border-radius: 3px") layoutLine.addWidget(colored) else: layoutLine.addWidget(QLabel(i["text"])) btnInfos = QPushButton("Infos") btnInfos.clicked.connect( lambda checked, proId=i["id"]: core_more_infos(mainWindow, dial, proId) ) layoutLine.addStretch() layoutLine.addWidget(btnInfos) layoutsResult.append(layoutLine) layoutMain = QVBoxLayout() for layout in layoutsResult: layoutMain.addLayout(layout) dial.setLayout(layoutMain) dial.show()