def init_calendario(self): calendario = QCalendarWidget(self) currentMonth = datetime.now().month currentYear = datetime.now().year calendario.setMinimumDate(QDate(currentYear, currentMonth, 1)) calendario.setMaximumDate( QDate(currentYear + 1, currentMonth, calendar.monthrange(currentYear, currentMonth)[1])) calendario.setSelectedDate(QDate(currentYear, currentMonth, 1)) calendario.setFont(QFont('Georgia', 10)) calendario.setStyleSheet('background-color: lightblue') calendario.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) calendario.setGeometry(200, 200, 300, 200) calendario.setGridVisible(True) return calendario
class Window(QMainWindow): def __init__(self): super().__init__() # setting title self.setWindowTitle("Dynamic Coding") # setting geometry self.setGeometry(100, 100, 400, 250) self.setFixedSize(400,250) # calling method self.UiComponents() # showing all the widgets self.show() # method for components def UiComponents(self): # creating a QCalendarWidget object self.calendar = QCalendarWidget(self) # setting geometry to the calender self.calendar.setGeometry(0, 0, 400, 250) # setting style sheet // change the color of calender if you want .. self.calendar.setStyleSheet("background : cyan;") # ensuring paint event self.calendar.repaint()
class VistaAggiungiOrari( QWidget ): # Apre la vista che consente di aggiungere un oraario per le prenotazioni. def __init__(self, tipo): super(VistaAggiungiOrari, self).__init__() self.tipo = tipo self.controller = ControllerListaPrenotazioni() self.stylesheet_frame = """ QFrame{ background-color: white; border: 1px solid grey; } """ self.stylesheet_window = """ QWidget{ background-color: #efefef; } """ self.stylesheet_label = """ QLabel{ background-color: transparent; } QLineEdit{ background-color: white; border: 2px solid #dfdfdf } QComboBox{ background-color: white; border: 1px solid grey; color: black; } """ self.stylesheet_button_back = """ QPushButton{ border-radius: 15px; background-color: transparent; } QPushButton::Pressed{ background-color: transparent; } """ self.stylesheet_button = """ QPushButton{ background-color: #cc3234; color: white; border-radius: 15px; } QPushButton::Pressed{ background-color: grey } """ self.stylesheet_calendar = """ QCalendarWidget QToolButton{ background-color : lightblue; } QCalendarWidget QWidget{ background-color : lightblue; } """ # Inserimento e impostazioni grafiche dell'immagine dello sfondo della finestra. self.imagePath = "Image/foto.png" self.image = QImage(self.imagePath) self.label = QLabel(self) self.label.setPixmap(QPixmap.fromImage(self.image)) self.label.setScaledContents(True) self.label.setGeometry(0, 0, 1050, 600) # Inserimento e impostazioni grafiche dell'etichetta 'Nuovo Orario'. self.label = QLabel(self) self.font = QFont("Arial", 18, QFont.Bold) self.label.setText("Nuovo Orario") self.label.setFont(self.font) self.label.setStyleSheet(self.stylesheet_label) self.label.setGeometry(50, 55, 250, 40) # Inserimento e impostazioni grafiche del frame nella finestra. self.frame = QFrame(self) self.frame.setStyleSheet(self.stylesheet_frame) self.frame.setGeometry(50, 100, 950, 330) # Usa la funzione 'create_label' per creare un etichetta. self.create_label("Tipo", 150) # Inserimento e impostazioni grafiche del menù a tendina per scegliere l'orario di un nuovo servizio. self.edit_tipo = QComboBox(self) self.edit_tipo.addItem("Lezione") self.edit_tipo.addItem("Esame teorico") self.edit_tipo.addItem("Lezione guida") self.edit_tipo.addItem("Esame pratico") self.edit_tipo.setGeometry(250, 150, 200, 30) self.edit_tipo.setStyleSheet(self.stylesheet_label) # Inserimento e impostazioni grafiche dell'etichetta 'Data'. self.label_data = QLabel(self) self.label_data.setText("Data") self.label_data.setGeometry(500, 150, 100, 20) self.label_data.setStyleSheet(self.stylesheet_label) self.font_label = QFont("Times", 9) self.label_data.setFont(self.font_label) # Inserimento e impostazioni grafiche del calendario. self.calendar = QCalendarWidget(self) self.calendar.setGridVisible(True) self.calendar.setStyleSheet(self.stylesheet_calendar) self.calendar.setGeometry(575, 150, 350, 250) # Inserimento e impostazioni grafiche del bottone per tornare alla vista precedente. self.button_back = QPushButton(self) self.button_back.setIcon(QIcon('Image/back.png')) self.button_back.setIconSize(QSize(90, 90)) self.button_back.setGeometry(50, 470, 90, 90) self.button_back.setStyleSheet(self.stylesheet_button_back) self.button_back.clicked.connect(self.go_back) # Inserimento e impostazioni grafiche per il bottone che permette di effettuare l'aggiunta dell'orario. self.button_prenota = QPushButton(self) self.button_prenota.setText("Aggiungi orario") self.font_button = QFont("Times", 11) self.button_prenota.setFont(self.font_button) self.button_prenota.setGeometry(750, 490, 200, 50) self.button_prenota.setStyleSheet(self.stylesheet_button) self.button_prenota.clicked.connect(self.go_aggiungi_orario) # Impostazioni grafiche generali della finestra del programma. self.setWindowTitle("Nuovo Orario") self.setStyleSheet(self.stylesheet_window) self.resize(1050, 600) self.setFixedSize(self.size()) # == create_label == # La funzione crea un etichetta con nome inserito in input alla funzione e posizione nella finestra # presa anch'essa in input. La funzione gestisce anche le impostazioni grafiche dell'etichetta. def create_label(self, nome, posizione): self.label_edit = QLabel(self) self.label_edit.setText(nome) self.label_edit.setGeometry(80, posizione, 110, 20) self.label_edit.setStyleSheet(self.stylesheet_label) self.font_label1 = QFont("Times", 9) self.label_edit.setFont(self.font_label1) # == go_back == # La funzione si occupa di aprire la finestra precedente. def go_back(self): self.vista_home = VistaListaPrenotazioni.VistaListaPrenotazioni( self.tipo) self.vista_home.show() self.close() # == go_aggiungi_orario == # La funzione aggiunge l'orario inserito alla lista delle prenotazioni, invia un messaggio di conferma # all'utente e reindirizza l'utente alla VistaListaPrenotazioni. def go_aggiungi_orario(self): trovato = False for orario in self.controller.get_lista_prenotazioni(): self.controller_prenotazione = ControllerPrenotazione(orario) if self.calendar.selectedDate().toString("dd-MM") == self.controller_prenotazione.get_data() and \ self.edit_tipo.currentText() == self.controller_prenotazione.get_tipo(): trovato = True QMessageBox.information(self, "Errore", "Orario già presente nel sistema", QMessageBox.Ok) if not trovato: self.controller.aggiungi_prenotazione( Prenotazione(self.edit_tipo.currentText(), self.calendar.selectedDate().toString("dd-MM"))) QMessageBox.information(self, "Confermato", "Orario aggiunto nel sistema", QMessageBox.Ok) self.go_lista_visite = VistaListaPrenotazioni.VistaListaPrenotazioni( self.tipo) self.go_lista_visite.show() self.close()
class AddCutplanDialog(QWidget): def setupUi(self, adddata=None, sqlfile=None, host=None): now = datetime.now() if host is None: self.host = '' else: self.host = host if adddata is None: self.addData = DataFrame( columns=['ID', 'Log Count', 'Description']) else: self.addData = adddata self.availData = None self.addPD = None self.avalPD = None # SQL if sqlfile is None: self.sqlfile = "support\\cpquery.sql" else: self.sqlfile = sqlfile # SERVER CONNECT QApplication.setOverrideCursor( QCursor(Qt.WaitCursor)) self.conn = connect(LogScanner) QApplication.restoreOverrideCursor() self.setObjectName("Dialog") # self.setWindowIcon(QIcon('images/icon.ico')) self.resize(250, 900) self.setStyleSheet( "#Dialog {\n" " background-color: white;\n" "}") self.installEventFilter(self) self.horizontalLayout = QVBoxLayout(self) self.horizontalLayout.setObjectName("horizontalLayout") self.calendarWidget = QCalendarWidget(self) font = QFont() font.setFamily("Tahoma") font.setPointSize(10) self.calendarWidget.setFont(font) self.calendarWidget.setStyleSheet( "#qt_calendar_prevmonth {\n" " qproperty-icon: url(\"images/prev.png\");\n" "}\n" "\n" "#qt_calendar_nextmonth {\n" " qproperty-icon: url(\"images/next.png\");\n" "}\n" "\n" "#qt_calendar_navigationbar {\n" " background-color: qlineargradient(spread:pad, x1:0, y1:0, " "x2:1, y2:1, stop:0 rgb(192, 221, 221), stop:1 rgb(180, 233, " "197));\n" "}\n" "\n" "#qt_calendar_monthbutton {\n" " color: rgb(0,115,119);\n" " font-size: 15px;\n" "}\n" "\n" "#qt_calendar_yearbutton {\n" " color: rgb(0,115,119);\n" " font-size: 15px;\n" "}\n" "\n" "QCalendarWidget QMenu {\n" " background-color: white;\n" " color: rgb(0,115,119);\n" "}\n" "\n" "QCalendarWidget QMenu::item:selected {\n" " background-color: rgb(192, 221, 221);\n" " color: rgb(0,115,119);\n" "}\n" "\n" "QCalendarWidget QSpinBox {\n" " color: rgb(0,115,119);\n" " selection-background-color: rgb(0, 115, 119);\n" " selection-color: white;\n" "}\n" "\n" "#qt_calendar_calendarview:enabled {\n" " background-color: rgb(192, 221, 221);\n" " alternate-background-color: white;\n" " color: rgb(0, 115, 119);\n" " selection-background-color: rgb(0, 115, 119);\n" " selection-color: white;\n" "}\n" "\n" "#qt_calendar_calendarview:disabled {\n" " color: #44acb0;\n" "}\n" "\n" "") btn = self.calendarWidget.findChild( QToolButton, "qt_calendar_prevmonth") btn.setCursor(QCursor(Qt.PointingHandCursor)) btn = self.calendarWidget.findChild( QToolButton, "qt_calendar_nextmonth") btn.setCursor(QCursor(Qt.PointingHandCursor)) self.calendarWidget.setVerticalHeaderFormat( QCalendarWidget.NoVerticalHeader) self.calendarWidget.setObjectName("calendarWidget") self.calendarWidget.setMinimumDate(QDate(2016, 1, 1)) self.calendarWidget.setMaximumDate( QDate(now.year, now.month, now.day)) btn = self.calendarWidget.findChild( QSpinBox, "qt_calendar_yearedit") btn.setAlignment(Qt.AlignCenter) btn.setButtonSymbols(QSpinBox.NoButtons) self.horizontalLayout.addWidget(self.calendarWidget) self.leftTV = QTableView(self) self.leftTV.setStyleSheet( "QTableView {" "border: 1px solid rgb(192, 221, 221);" "gridline-color: rgb(192, 221, 221);" "selection-background-color: rgb(192, 221, 221);" "selection-color: rgb(0,115,119);" "}" "QTableView::item::selected:!active {" "selection-color: rgb(0,115,119);" "}" ) self.leftTV.setObjectName("leftTV") self.leftTV.horizontalHeader().setDefaultSectionSize(65) self.leftTV.horizontalHeader().setStretchLastSection(True) self.leftTV.horizontalHeader().setStyleSheet( "QHeaderView::section {" "height: 25px;" "border: 1px outset rgb(192, 221, 221);" "background-color: white;" "selection-background-color: white;" "}" ) scrollbarss = """ QScrollBar:vertical { border: none; background: white; width: 5px; margin: 0 0 0 0; } QScrollBar::handle:vertical { background: rgb(192, 221, 221); border-radius: 2px; min-height: 20px; } QScrollBar::add-line:vertical { border: none; background: none; height: 0; subcontrol-position: none; subcontrol-origin: none; } QScrollBar::sub-line:vertical { border: none; background: none; height: 0; subcontrol-position: none; subcontrol-origin: none; } QScrollBar::up-arrow:vertical, QScrollBar::down-arrow:vertical { border: none; width: 0; height: 0; background: none; } QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical { background: none; } QScrollBar:horizontal { border: none; background: white; height: 5px; margin: 0 0 0 0; } QScrollBar::handle:horizontal { background: rgb(192, 221, 221); border-radius: 2px; min-width: 20px; } QScrollBar::add-line:horizontal { border: none; background: none; width: 0; } QScrollBar::sub-line:horizontal { border: none; background: none; width: 0; } QScrollBar::left-arrow:horizontal, QScrollBar::right-arrow:horizontal { border: none; width: 0; height: 0; background: none; } QScrollBar::add-page:horizontal, QScrollBar::sub-page:horizontal { background: none; } """ self.leftTV.verticalScrollBar().setStyleSheet(scrollbarss) self.leftTV.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn) self.leftTV.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) self.leftFilter = HoverFilter() self.leftTV.horizontalHeader().installEventFilter(self.leftFilter) lcDelegate = LogCountDelegate() self.leftTV.setItemDelegateForColumn(1, lcDelegate) self.horizontalLayout.addWidget(self.leftTV) self.middleButtonsLayout = QHBoxLayout() self.middleButtonsLayout.setObjectName("middleButtonsLayout") self.addButton = QToolButton(self) self.addButton.setObjectName("addButton") buttonStyle = \ "QToolButton {\n"\ " background-color: qlineargradient(spread:pad, x1:0, y1:0, "\ "x2:1, y2:1, stop:0 rgba(0, 115, 119, 255), stop:1 rgb(4, 147, "\ "131));\n"\ " color: white;\n"\ " border: None;"\ " border-radius: 2px;"\ " font: 11pt \"Tahoma\";"\ "}" self.addButton.setStyleSheet(buttonStyle) self.addButton.setCursor( QCursor(Qt.PointingHandCursor)) self.middleButtonsLayout.addWidget(self.addButton) self.deleteButton = QToolButton(self) font = QFont() font.setPointSize(10) self.deleteButton.setFont(font) self.deleteButton.setObjectName("deleteButton") self.deleteButton.setStyleSheet(buttonStyle) self.deleteButton.setCursor( QCursor(Qt.PointingHandCursor)) self.middleButtonsLayout.addWidget(self.deleteButton) self.horizontalLayout.addLayout(self.middleButtonsLayout) self.rightTV = QTableView(self) self.rightTV.setStyleSheet( "QTableView {" "border: 1px solid rgb(192, 221, 221);" "gridline-color: rgb(192, 221, 221);" "selection-background-color: rgb(192, 221, 221);" "selection-color: rgb(0,115,119);" "}" "QTableView::item::selected:!active {" "selection-color: rgb(0,115,119);" "}" ) self.rightTV.setObjectName("rightTV") self.rightTV.verticalScrollBar().setStyleSheet(scrollbarss) self.rightTV.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn) self.rightTV.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) self.rightTV.horizontalHeader().setDefaultSectionSize(65) self.rightTV.horizontalHeader().setStretchLastSection(True) self.rightTV.horizontalHeader().setStyleSheet( "QHeaderView::section {" "height: 25px;" "border: 1px outset rgb(192, 221, 221);" "background-color: white;" "selection-background-color: white;" "}" ) self.rightFilter = HoverFilter() self.rightTV.horizontalHeader().installEventFilter(self.rightFilter) lcDelegate = LogCountDelegate() self.rightTV.setItemDelegateForColumn(1, lcDelegate) self.horizontalLayout.addWidget(self.rightTV) # self.horizontalLayout.addLayout(self.vertlayoutl) self.buttonBox = QDialogButtonBox(self) self.buttonBox.setStyleSheet( "QDialogButtonBox QPushButton {\n" " background-color: ;\n" " background-color: qlineargradient(spread:pad, x1:0, y1:0, " "x2:1, y2:1, stop:0 rgba(0, 115, 119, 255), stop:1 rgb(4, 147, " "131));\n" " color: white;\n" " width: 70px;\n" " height: 25px;\n" " border: None;\n" " border-radius: 2px;\n" " \n" " font: 11pt \"Tahoma\";\n" "}") self.buttonBox.setOrientation(Qt.Horizontal) self.buttonBox.setStandardButtons( QDialogButtonBox.Cancel | QDialogButtonBox.Ok) self.buttonBox.setObjectName("buttonBox") for w in self.buttonBox.children(): if w.metaObject().className() == "QPushButton": w.setCursor(QCursor(Qt.PointingHandCursor)) self.horizontalLayout.addWidget(self.buttonBox) # DATA SET UP # self.onDateChange() # self.RTVSetUp() # EVENTS self.calendarWidget.selectionChanged.connect(self.onDateChange) self.addButton.clicked.connect(self.addFunction) self.deleteButton.clicked.connect(self.deleteFunction) self.retranslateUi(self) # self.buttonBox.button(QDialogButtonBox.Ok).clicked.connect( # self.accept) # self.buttonBox.rejected.connect(self.reject) QMetaObject.connectSlotsByName(self) def eventFilter(self, object, event): if object is self and event.type() == QEvent.KeyPress: if event.key() in (Qt.Key_Return, Qt.Key_Enter,): return True return super(AddCutplanDialog, self).eventFilter(object, event) def onDateChange(self): f = open(self.sqlfile, 'r') sqltext = f.read() selDate = self.calendarWidget.selectedDate().toPyDate() date1 = datetime(selDate.year, selDate.month, selDate.day, 4, 0, 0, 0) date2 = date1 + timedelta(1) sqltext = sqltext.replace( '@date1', str(date1)).replace('@date2', str(date2)) self.availData = read_sql(sqltext, self.conn) self.LTVSetUp() def LTVSetUp(self): self.availPD = PandasModel( self.availData ) for i in range(self.addData.shape[0]): for j in range(self.availData.shape[0]): if self.addData.ID[i] == self.availData.ID[j]: self.availPD.setCompleted(j) self.leftTV.setModel(self.availPD) self.leftTV.setSelectionBehavior(QTableView.SelectRows) self.leftTV.verticalHeader().setVisible(False) self.leftTV.setColumnWidth(0, 45) self.availPD.dataChanged.connect(self.updateAvailPD) def RTVSetUp(self): self.addPD = PandasModel( self.addData ) self.rightTV.setModel(self.addPD) self.rightTV.setSelectionBehavior(QTableView.SelectRows) self.rightTV.verticalHeader().setVisible(False) self.rightTV.setColumnWidth(0, 45) self.addPD.dataChanged.connect(self.updateAddPD) def updateAvailPD(self, index, index2): self.availData.iloc[index.row(), index.column()] = \ self.availPD._df.iloc[index.row(), index.column()] def updateAddPD(self, index, index2): self.addData.iloc[index.row(), index.column()] = \ self.addPD._df.iloc[index.row(), index.column()] def addFunction(self): sm = self.leftTV.selectionModel() if sm.hasSelection(): for r in sm.selectedRows(): if not self.availPD._completed[r.row()]: data = self.availData.iloc[r.row()] self.addData = self.addData.append(data, ignore_index=True) self.availPD.setCompleted(r.row()) self.RTVSetUp() def deleteFunction(self): sm = self.rightTV.selectionModel() if sm.hasSelection(): for r in sm.selectedRows(): for i in range(self.availData.shape[0]): if self.availData.ID[i] == self.addData.ID[r.row()]: self.availPD.setCompleted(i, False) self.addData = self.addData.drop(index=r.row()) self.addData = self.addData.reset_index().drop(columns='index') self.RTVSetUp() def retranslateUi(self, Dialog): _translate = QCoreApplication.translate Dialog.setWindowTitle(_translate("Dialog", "Add Cutplans")) self.addButton.setText(_translate("Dialog", "Add ▼")) self.deleteButton.setText(_translate("Dialog", "▲ Remove"))
def ajoutRechercheBonDeTravail(self): # Recuperation des differents attributs self.bonDeTravailManager = BonTravailManager(pathBonTravailDatabase) try: fichierConf = open(pathFichierConf, 'r') # try: ouvrir le fichier et le lire with fichierConf: self._conf = yaml.load(fichierConf) except IOError: # attrape l'erreur IOError si elle se présente et renvoie print("Could not read file: ", pathFichierConf) # définir ce qu'il faut faire pour corriger self.listeCategorieEquipement = list(self._conf['CategorieEquipement']) self.listeCategorieEquipement.sort() self.listeUnite = list(self._conf['Unite']) self.listeUnite.sort() self.listeEtatService = list(self._conf['EtatService']) self.listeEtatService.sort() #Mise a jour des differentes listes deroulantes self.comboBoxCategorieEquipement.clear() self.comboBoxCategorieEquipement.addItem("") self.comboBoxCategorieEquipement.addItems(self.listeCategorieEquipement) self.comboBoxEtat.clear() self.comboBoxEtat.addItem("") self.comboBoxEtat.addItems(self.listeEtatService) self.comboBoxUnite.clear() self.comboBoxUnite.addItem("") self.comboBoxUnite.addItems(self.listeUnite) fichierConf.close() self.signalRechercheBon = Communicate() self.signalRechercheBon.aucunResultat.connect(self.aucunResultat) self.signalRechercheBon.remplirTableau.connect(self.remplirTableau) self.signalRechercheBon.nouvelleRecherche.connect(self.nouvelleRecherche) #modification calendrier calendrierApres = QCalendarWidget() calendrierApres.setStyleSheet("background :#F5F5F5;\n color: black;") calendrierApres.setGridVisible(True) self.calendrierApres.setCalendarWidget(calendrierApres) calendrierApres.setVerticalHeaderFormat(QCalendarWidget.NoVerticalHeader) self.calendrierApres.setLocale(QLocale(QLocale.French, QLocale.France)) calendrierAvant = QCalendarWidget() calendrierAvant.setStyleSheet("background :#F5F5F5;\n color: black;") calendrierAvant.setVerticalHeaderFormat(QCalendarWidget.NoVerticalHeader) calendrierAvant.setGridVisible(True) self.calendrierAvant.setCalendarWidget(calendrierAvant) self.calendrierAvant.setLocale(QLocale(QLocale.French, QLocale.France)) self.calendrierAvant.setDate(QDate.currentDate()) self.calendrierApres.setDate(QDate.currentDate()) #Creation des differents colonnes pour le tableau de resultat self.listeCleDonnees = list(["IdEquipement", "NumeroBonTravail", "CategorieEquipement", "Modele", "Unite", "EtatBDT", "Date", "DescriptionSituation"]) #liste contenant les bons résultant de la recherche self.listeResultat = list() #liste contenant les informations des bons a afficher self.listeDonnees = list() self.tableResultats.setColumnCount(len(self.listeCleDonnees)) self.listeHeaders = ["Id de l'équipement", "Numero du bon de travail", "Catégorie d'équipement", "Modèle", "Unité", "État BDT", "Date", "Description de la situation"] self.tableResultats.setHorizontalHeaderLabels(self.listeHeaders) self.tableResultats.resizeColumnsToContents() self.tableResultats.setRowCount(0) self.dictionnaireRecherche = dict() #Connexion des differentes recherches pour la mise a jour automatique self.comboBoxCategorieEquipement.currentTextChanged.connect(self.rechercheCategorieEquipement) self.comboBoxEtat.currentTextChanged.connect(self.rechercheEtatDeService) self.comboBoxUnite.currentTextChanged.connect(self.rechercheUnite) self.calendrierAvant.dateChanged.connect(self.rechercheDateAvant) self.lineEditDescriptionSituation.returnPressed.connect(self.rechercheDescriptionSituation) self.calendrierApres.dateChanged.connect(self.rechercheDateApres) self.boutonNouvelleRecherche.clicked.connect(self.signalRechercheBon.nouvelleRecherche.emit) self.tableResultats.horizontalHeader().sectionClicked.connect(self.trier) self.boutonActualiser.clicked.connect(self.rechercherBonTravailThread) self.colonneClique = None self.nombreClique = 0 # Empeche la modification de la table self.tableResultats.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers); self.tableResultats.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows) self.tableResultats.cellDoubleClicked.connect(self.choisirBonDeTravail) self.bonDeTravailSelectionne = None
class VistaPrenotaVisitaMedica( QWidget): # Apre la vista per consente di prenotare una visita medica def __init__(self, parent=None): super(VistaPrenotaVisitaMedica, self).__init__(parent) self.controller = ControllerListaVisiteMediche() self.controller_clienti = ControllerListaClienti() self.stylesheet_frame = """ QFrame{ background-color: white; border: 1px solid grey; } """ self.stylesheet_window = """ QWidget{ background-color: #efefef; } """ self.stylesheet_label = """ QLabel{ background-color: transparent; } QLineEdit{ background-color: white; border: 2px solid #dfdfdf } QComboBox{ background-color: white; border: 1px solid grey; color: black; } """ self.stylesheet_button_back = """ QPushButton{ border-radius: 15px; background-color: transparent; } QPushButton::Pressed{ background-color: transparent; } """ self.stylesheet_button = """ QPushButton{ background-color: #cc3234; color: white; border-radius: 15px; } QPushButton::Pressed{ background-color: grey } """ self.stylesheet_calendar = """ QCalendarWidget QToolButton{ background-color : lightblue; } QCalendarWidget QWidget{ background-color : lightblue; } """ self.imagePath = "Image/foto.png" self.image = QImage(self.imagePath) self.label = QLabel(self) self.label.setPixmap(QPixmap.fromImage(self.image)) self.label.setScaledContents(True) self.label.setGeometry(0, 0, 1050, 600) # Inserimento e impostazioni grafiche dell'etichetta 'Prenota Visita'. self.label = QLabel(self) self.font = QFont("Times", 18) self.label.setText("Prenota Visita") self.label.setFont(self.font) self.label.setGeometry(50, 55, 250, 40) # Inserimento e impostazioni grafiche del frame nella finestra. self.frame = QFrame(self) self.frame.setStyleSheet(self.stylesheet_frame) self.frame.setGeometry(50, 100, 950, 330) # Usa la funzione 'create_label1' e 'create_label2' per creare due colonne di etichette. self.create_label1("Cliente", 150) self.create_label2("Data visita", 150) # Inserimento e impostazioni grafiche del menù a tendina contenente la lista dei clienti. self.edit_cf_cliente = QComboBox(self) for cliente in self.controller_clienti.get_lista_clienti(): self.controller_cliente = ControllerCliente(cliente) print(self.controller_cliente.get_visita_medica()) if self.controller_cliente.get_visita_medica() == "None": self.edit_cf_cliente.addItem( self.controller_cliente.get_nome() + " " + self.controller_cliente.get_cognome()) self.edit_cf_cliente.setGeometry(175, 150, 200, 30) self.edit_cf_cliente.setStyleSheet(self.stylesheet_label) # Inserimento e impostazioni grafiche del calendario. self.calendar = QCalendarWidget(self) self.calendar.setGridVisible(True) self.calendar.setStyleSheet(self.stylesheet_calendar) self.calendar.setGeometry(500, 150, 475, 250) # Inserimento e impostazioni grafiche del bottone per tornare alla vista precedente. self.button_back = QPushButton(self) self.button_back.setIcon(QIcon('Image/back.png')) self.button_back.setIconSize(QSize(90, 90)) self.button_back.setGeometry(50, 470, 90, 90) self.button_back.setStyleSheet(self.stylesheet_button_back) self.button_back.clicked.connect(self.go_back) # Inserimento e impostazioni grafiche del bottone che consente di confermare la prenotazione self.button_prenota = QPushButton(self) self.button_prenota.setText("Prenota visita") self.font_button = QFont("Times", 11) self.button_prenota.setFont(self.font_button) self.button_prenota.setGeometry(750, 490, 200, 50) self.button_prenota.setStyleSheet(self.stylesheet_button) self.button_prenota.clicked.connect(self.go_prenotazione) # Impostazioni grafiche generali della finestra del programma. self.setWindowTitle("Prenota Visita") self.setStyleSheet(self.stylesheet_window) self.resize(1050, 600) self.setFixedSize(self.size()) # == create_label1 == # La funzione crea un etichetta con nome inserito in input alla funzione e posizione nella finestra # presa anch'essa in input. La funzione gestisce anche le impostazioni grafiche dell'etichetta. # Le etichette create con questa funzione verranno collocate nella prima colonna. def create_label1(self, nome, posizione): self.label_edit = QLabel(self) self.label_edit.setText(nome) self.label_edit.setGeometry(80, posizione, 110, 20) self.label_edit.setStyleSheet(self.stylesheet_label) self.font_label = QFont("Times", 9) self.label_edit.setFont(self.font_label) # == create_label2 == # La funzione crea un etichetta con nome inserito in input alla funzione e posizione nella finestra # presa anch'essa in input. La funzione gestisce anche le impostazioni grafiche dell'etichetta. # Le etichette create con questa funzione verranno collocate nella seconda colonna. def create_label2(self, nome, posizione): self.label_edit = QLabel(self) self.label_edit.setText(nome) self.label_edit.setGeometry(400, posizione, 115, 20) self.label_edit.setStyleSheet(self.stylesheet_label) self.font_label = QFont("Times", 9) self.label_edit.setFont(self.font_label) # == go_back == # La funzione si occupa di aprire la finestra precedente. def go_back(self): self.vista_home = VistaListaVisiteMediche.VistaListaVisiteMediche() self.vista_home.show() self.close() # == go_prenotazione == # La funzione aggiunge la visita fissata per la data selezionata dal calendario nella lista_visite. # Successivamente viene mandato un messaggio di conferma all'utente e infine viene riaperta la # VistaListaVisiteMediche. def go_prenotazione(self): self.controller.aggiungi_visita( VisitaMedica(self.edit_cf_cliente.currentText(), self.calendar.selectedDate().toString("dd-MM-yyyy"))) QMessageBox.information( self, "Prenotato", "Visita prenotata per il " + self.calendar.selectedDate().toString("dd-MM-yyyy"), QMessageBox.Ok) self.go_lista_visite = VistaListaVisiteMediche.VistaListaVisiteMediche( ) self.go_lista_visite.show() self.close()
def ajoutRechercheBonDeTravail(self): # Recuperation des differents attributs self.bonDeTravailManager = BonTravailManager(pathBonTravailDatabase) try: fichierConf = open(pathFichierConf, 'r') # try: ouvrir le fichier et le lire with fichierConf: self._conf = yaml.load(fichierConf) except IOError: # attrape l'erreur IOError si elle se présente et renvoie print("Could not read file: ", pathFichierConf) # définir ce qu'il faut faire pour corriger self.listeCategorieEquipement = list(self._conf['CategorieEquipement']) self.listeCategorieEquipement.sort() self.listeUnite = list(self._conf['Unite']) self.listeUnite.sort() self.listeEtatService = list(self._conf['EtatService']) self.listeEtatService.sort() #Mise a jour des differentes listes deroulantes self.comboBoxCategorieEquipement.clear() self.comboBoxCategorieEquipement.addItem("") self.comboBoxCategorieEquipement.addItems( self.listeCategorieEquipement) self.comboBoxEtat.clear() self.comboBoxEtat.addItem("") self.comboBoxEtat.addItems(self.listeEtatService) self.comboBoxUnite.clear() self.comboBoxUnite.addItem("") self.comboBoxUnite.addItems(self.listeUnite) fichierConf.close() self.signalRechercheBon = Communicate() self.signalRechercheBon.aucunResultat.connect(self.aucunResultat) self.signalRechercheBon.remplirTableau.connect(self.remplirTableau) self.signalRechercheBon.nouvelleRecherche.connect( self.nouvelleRecherche) #modification calendrier calendrierApres = QCalendarWidget() calendrierApres.setStyleSheet("background :#F5F5F5;\n color: black;") calendrierApres.setGridVisible(True) self.calendrierApres.setCalendarWidget(calendrierApres) calendrierApres.setVerticalHeaderFormat( QCalendarWidget.NoVerticalHeader) self.calendrierApres.setLocale(QLocale(QLocale.French, QLocale.France)) calendrierAvant = QCalendarWidget() calendrierAvant.setStyleSheet("background :#F5F5F5;\n color: black;") calendrierAvant.setVerticalHeaderFormat( QCalendarWidget.NoVerticalHeader) calendrierAvant.setGridVisible(True) self.calendrierAvant.setCalendarWidget(calendrierAvant) self.calendrierAvant.setLocale(QLocale(QLocale.French, QLocale.France)) self.calendrierAvant.setDate(QDate.currentDate()) self.calendrierApres.setDate(QDate.currentDate()) #Creation des differents colonnes pour le tableau de resultat self.listeCleDonnees = list([ "IdEquipement", "NumeroBonTravail", "CategorieEquipement", "Modele", "Unite", "EtatBDT", "Date", "DescriptionSituation" ]) #liste contenant les bons résultant de la recherche self.listeResultat = list() #liste contenant les informations des bons a afficher self.listeDonnees = list() self.tableResultats.setColumnCount(len(self.listeCleDonnees)) self.listeHeaders = [ "Id de l'équipement", "Numero du bon de travail", "Catégorie d'équipement", "Modèle", "Unité", "État BDT", "Date", "Description de la situation" ] self.tableResultats.setHorizontalHeaderLabels(self.listeHeaders) self.tableResultats.resizeColumnsToContents() self.tableResultats.setRowCount(0) self.dictionnaireRecherche = dict() #Connexion des differentes recherches pour la mise a jour automatique self.comboBoxCategorieEquipement.currentTextChanged.connect( self.rechercheCategorieEquipement) self.comboBoxEtat.currentTextChanged.connect( self.rechercheEtatDeService) self.comboBoxUnite.currentTextChanged.connect(self.rechercheUnite) self.calendrierAvant.dateChanged.connect(self.rechercheDateAvant) self.lineEditDescriptionSituation.returnPressed.connect( self.rechercheDescriptionSituation) self.calendrierApres.dateChanged.connect(self.rechercheDateApres) self.boutonNouvelleRecherche.clicked.connect( self.signalRechercheBon.nouvelleRecherche.emit) self.tableResultats.horizontalHeader().sectionClicked.connect( self.trier) self.boutonActualiser.clicked.connect(self.rechercherBonTravailThread) self.colonneClique = None self.nombreClique = 0 # Empeche la modification de la table self.tableResultats.setEditTriggers( QtWidgets.QAbstractItemView.NoEditTriggers) self.tableResultats.setSelectionBehavior( QtWidgets.QAbstractItemView.SelectRows) self.tableResultats.cellDoubleClicked.connect(self.choisirBonDeTravail) self.bonDeTravailSelectionne = None
class VistaRinnovoPatente( QWidget): # Apre la vista che permette di rinnovare una patente def __init__(self, parent=None): super(VistaRinnovoPatente, self).__init__(parent) self.stylesheet_frame = """ QFrame{ background-color: white; border: 1px solid grey; } """ self.stylesheet_window = """ QWidget{ background-color: #efefef; } """ self.stylesheet_label = """ QLabel{ background-color: transparent; } QLineEdit{ background-color: white; border: 2px solid #dfdfdf } """ self.stylesheet_button_back = """ QPushButton{ border-radius: 15px; background-color: transparent; } QPushButton::Pressed{ background-color: transparent; } """ self.stylesheet_button = """ QPushButton{ background-color: #cc3234; color: white; border-radius: 15px; } QPushButton::Pressed{ background-color: grey } """ self.stylesheet_calendar = """ QCalendarWidget QToolButton{ background-color : lightblue; } QCalendarWidget QWidget{ background-color : lightblue; } """ # Inserimento e impostazioni grafiche dell'immagine dello sfondo della finestra. self.imagePath = "Image/foto.png" self.image = QImage(self.imagePath) self.label = QLabel(self) self.label.setPixmap(QPixmap.fromImage(self.image)) self.label.setScaledContents(True) self.label.setGeometry(0, 0, 1250, 600) # Inserimento e impostazioni grafiche dell'etichetta 'Rinnovo Patente'. self.label = QLabel(self) self.font = QFont("Arial", 18, QFont.Bold) self.label.setText("Rinnovo Patente") self.label.setFont(self.font) self.label.setStyleSheet(self.stylesheet_label) self.label.setGeometry(50, 55, 300, 40) # Inserimento e impostazioni grafiche del frame nella finestra. self.frame = QFrame(self) self.frame.setStyleSheet(self.stylesheet_frame) self.frame.setGeometry(50, 100, 1150, 330) # Usa la funzione 'create_label1' e 'create_label2' per creare due colonne di etichette. self.create_label1("Nome", 150) self.create_label1("Cognome", 200) self.create_label1("Numero patente", 300) self.create_label2("Data di scadenza", 150) # Inserimento e impostazioni grafiche delle caselle di testo per inserire le informazioni # della patente da rinnovare. self.edit_nome = QLineEdit(self) self.edit_nome.setGeometry(250, 150, 200, 30) self.edit_nome.setStyleSheet(self.stylesheet_label) self.edit_cognome = QLineEdit(self) self.edit_cognome.setGeometry(250, 200, 200, 30) self.edit_cognome.setStyleSheet(self.stylesheet_label) self.edit_patente = QLineEdit(self) self.edit_patente.setGeometry(250, 300, 200, 30) self.edit_patente.setStyleSheet(self.stylesheet_label) # Inserimento e impostazioni grafiche del calendario. self.calendar = QCalendarWidget(self) self.calendar.setGridVisible(True) self.calendar.setStyleSheet(self.stylesheet_calendar) self.calendar.setGeometry(670, 150, 475, 250) # Inserimento e impostazioni grafiche del bottone per tornare alla vista precedente. self.button_back = QPushButton(self) self.button_back.setIcon(QIcon('Image/back.png')) self.button_back.setIconSize(QSize(90, 90)) self.button_back.setGeometry(50, 470, 90, 90) self.button_back.setStyleSheet(self.stylesheet_button_back) self.button_back.clicked.connect(self.go_back) # Inserimento e impostazioni grafiche del bottone per procedere col pagamento della # procedura di rinnovo della patente. self.button_pagamento = QPushButton(self) self.button_pagamento.setText("Procedi pagamento") self.font_button = QFont("Times", 11) self.button_pagamento.setFont(self.font_button) self.button_pagamento.setGeometry(1000, 490, 200, 50) self.button_pagamento.setStyleSheet(self.stylesheet_button) self.button_pagamento.clicked.connect(self.go_pagamento) # Impostazioni grafiche generali della finestra del programma. self.setWindowTitle("Rinnovo Patente") self.setStyleSheet(self.stylesheet_window) self.resize(1250, 600) self.setFixedSize(self.size()) # == create_label1 == # La funzione crea un etichetta con nome inserito in input alla funzione e posizione nella finestra # presa anch'essa in input. La funzione gestisce anche le impostazioni grafiche dell'etichetta. # Le etichette create con questa funzione verranno collocate nella prima colonna. def create_label1(self, nome, posizione): self.label_edit = QLabel(self) self.label_edit.setText(nome) self.label_edit.setGeometry(80, posizione, 130, 20) self.label_edit.setStyleSheet(self.stylesheet_label) self.font_label = QFont("Times", 9) self.label_edit.setFont(self.font_label) # == create_label2 == # La funzione crea un etichetta con nome inserito in input alla funzione e posizione nella finestra # presa anch'essa in input. La funzione gestisce anche le impostazioni grafiche dell'etichetta. # Le etichette create con questa funzione verranno collocate nella seconda colonna. def create_label2(self, nome, posizione): self.label_edit = QLabel(self) self.label_edit.setText(nome) self.label_edit.setGeometry(500, posizione, 135, 20) self.label_edit.setStyleSheet(self.stylesheet_label) self.font_label = QFont("Times", 9) self.label_edit.setFont(self.font_label) # == go_back == # La funzione si occupa di aprire la finestra precedente. def go_back(self): self.vista_home = VistaHomeSegretario.VistaHomeSegretario() self.vista_home.show() self.close() # == go_pagamento == # La funzione apre la VistaRiepilogo e gli passa i parametri di pagamento # per il rinnovo della patente. def go_pagamento(self): if self.edit_nome.text() == "" or self.edit_cognome.text( ) == "" or self.edit_patente.text() == "": QMessageBox.critical(self, "Errore", "Inserisci tutti i dati!", QMessageBox.Ok) return else: if len(self.edit_patente.text()) != 10: QMessageBox.critical(self, "Errore", "Il numero patente immesso non è valido", QMessageBox.Ok) self.edit_patente.clear() return else: self.pagamento = VistaRiepilogo( "80", "Bollettini + visita medica (Rinnovo patente)", -1, self.edit_nome.text() + " " + self.edit_cognome.text()) self.pagamento.show() self.close()
class Analyse(QWidget): def __init__(self): super().__init__() self.init_ui() self.baglanti_olustur() def baglanti_olustur(self): self.baglanti = sqlite3.connect("Market-Basket.db") self.cursor = self.baglanti.cursor() sorgu = "Create Table If not exists Results(Produkts TEXT NOT NULL UNIQUE,Support REAL,Confidence REAL,Lift REAL)" self.cursor.execute(sorgu) self.baglanti.commit() def baglanti_kes(self): self.baglanti.close() def init_ui(self): self.veri_duzenle = QPushButton("Veri Düzenle") self.analiz = QPushButton("Analiz") self.bestseller = QPushButton("En Çok Satılanlar") self.calendar = QCalendarWidget(self) #####CSS AYARLAR#### css = (""" color: #eff0f1; background-color: qlineargradient(x1: 0.5, y1: 0.5 x2: 0.5, y2: 1, stop: 0 #3b4045, stop: 0.5 #31363b); border-width: 1ex; border-color: black; border-style: solid; padding: 1ex; border-radius: 1ex; outline: none; """) css2 = (""" border-width: 0ex; border-color: black; border-style: solid; padding: 0ex; border-radius: 0ex; outline: none; background: transparent; """) css3 = (""" border-width: 0.5ex; border-color: black; border-style: solid; padding: 0.5ex; border-radius: 0.5ex; outline: none; """) ###AYARLAR#### self.veri_duzenle.setStyleSheet(css) self.analiz.setStyleSheet(css) self.bestseller.setStyleSheet(css) self.calendar.setStyleSheet(css3) self.calendar.setMaximumSize(300, 300) self.setStyleSheet("background-color: white") labelImage = QLabel() pixmap = QPixmap("logo2.jpg") labelImage.setPixmap(pixmap) labelImage.setStyleSheet(css2) labelImage.setMaximumSize(400, 400) v_box = QVBoxLayout() v_box.addWidget(self.calendar) v_box.addWidget(self.veri_duzenle) v_box.addWidget(self.analiz) v_box.addWidget(self.bestseller) v_box.addStretch(10) h_box = QHBoxLayout() h_box.addWidget(labelImage) h_box.addLayout(v_box) self.setLayout(h_box) self.setWindowTitle("Market-Basket Analyse") self.veri_duzenle.clicked.connect(self.excel_duzenleme) self.analiz.clicked.connect(self.analiz_yap) self.bestseller.clicked.connect(self.show_bestseller) def message(self): msg = QMessageBox() msg.setWindowTitle("Bilgilendirme") msg.setText("İşlem sürmektedir...") msg.setIcon(QMessageBox.Information) msg.setStandardButtons(QMessageBox.Ok) msg.setDefaultButton(QMessageBox.Ok) msg.exec_() def show_bestseller(self): dosya_ismi = QFileDialog.getOpenFileName(self, "Dosya Aç", os.getenv("HOME")) excel_file = pd.read_excel(dosya_ismi[0]) my_list = excel_file['ProduktHierarchie'].tolist() sonuc = Counter(my_list) bestseller = sonuc.most_common(10) #DataBase# conn = sqlite3.connect("Market-Basket.db") cur = conn.cursor() cur.execute( "Create Table If not exists Bestseller(ProduktHierarchie TEXT NOT NULL UNIQUE,Satılan_Adet REAL)" ) sql_statement = "INSERT INTO Bestseller VALUES(?,?)" cur.executemany(sql_statement, bestseller) conn.commit() # Popup# msg = QMessageBox() msg.setWindowTitle("Bilgilendirme") msg.setText("En Çok Satılanlar Listesi Veritabanında Oluşturuldu!") msg.setIcon(QMessageBox.Information) msg.setStandardButtons(QMessageBox.Ok) msg.setDefaultButton(QMessageBox.Ok) msg.exec_() def excel_duzenleme(self): # Kullanıcı tarafından belirtilen dosyanın açılması için gerekli kod yapısı dosya_ismi = QFileDialog.getOpenFileName(self, "Dosya Aç", os.getenv("HOME")) self.message() a = load_workbook(dosya_ismi[0]) wb = open_workbook(dosya_ismi[0]) sayfa1 = wb.sheet_by_index(0) produkt_hierarchie = [] lieferung_nummer = [] m = 0 k = 0 for satir_no in range(sayfa1.nrows): produkt_hierarchie.append(sayfa1.cell(satir_no, 4).value) lieferung_nummer.append(sayfa1.cell(satir_no, 2).value) a.close() workbook = xw.Workbook("Analyse.xlsx") daten_sheet = workbook.add_worksheet(name='Daten') for i in range(len(lieferung_nummer) - 1): if lieferung_nummer[i] == lieferung_nummer[i + 1]: daten_sheet.write(m, 0, lieferung_nummer[i]) if produkt_hierarchie[i] != produkt_hierarchie[i + 1]: daten_sheet.write(m, k + 1, produkt_hierarchie[i]) k = k + 1 else: daten_sheet.write(m, k + 1, produkt_hierarchie[i]) else: daten_sheet.write(m, 0, lieferung_nummer[i]) daten_sheet.write(m, k + 1, produkt_hierarchie[i]) k = 0 m = m + 1 workbook.close() #Popup# msg = QMessageBox() msg.setWindowTitle("Bilgilendirme") msg.setText("Excel Dosyası Başarıyla güncellendi!") msg.setIcon(QMessageBox.Information) msg.setStandardButtons(QMessageBox.Ok) msg.setDefaultButton(QMessageBox.Ok) msg.exec_() def analiz_yap(self): dosya_ismi = QFileDialog.getOpenFileName(self, "Dosya Aç", os.getenv("HOME")) self.message() excel_file = pd.ExcelFile(dosya_ismi[0]) market_basket = excel_file.parse('Daten', header=None) df = market_basket.drop([0], axis=0) daten = df.drop([0], axis=1) total_records = len(daten) # Apriori algoritması devreye sokulmaktadır.... records = [] for i in range(0, total_records): records.append( [str(daten.values[i, j]) for j in range(0, daten.shape[1])]) associationRules = apriori(records, min_support=0.0050, min_lift=3, min_confidence=0.7, min_length=2) rules = associationRules self.veri_aktar(rules) msg = QMessageBox() msg.setWindowTitle("Bilgilendirme") msg.setText("Birliktelik Kuralları Oluşturuldu!") msg.setIcon(QMessageBox.Information) msg.setStandardButtons(QMessageBox.Ok) msg.setDefaultButton(QMessageBox.Ok) msg.exec_() def deger_ekle(self, produkts, support, confidence, lift): sorgu = "INSERT INTO Results VALUES(?,?,?,?)" try: self.cursor.execute(sorgu, (produkts, support, confidence, lift)) self.baglanti.commit() except: pass def veri_aktar(self, rules): for item in rules: pair = item[0] items = [x for x in pair] # Bu kısımda 4 farklı parametreye değerler atanmaktadır. produkts = str(items[0] + "->" + items[1]) support = str(item[1]) confidence = str(item[2][0][2]) lift = str(item[2][0][3]) if "nan" in produkts: pass else: self.deger_ekle(produkts, support, confidence, lift) msg = QMessageBox() msg.setWindowTitle("Bilgilendirme") msg.setText("Birliktelik Kuralları Veritabanına Eklendi!") msg.setIcon(QMessageBox.Information) msg.setStandardButtons(QMessageBox.Ok) msg.setDefaultButton(QMessageBox.Ok) msg.exec_()
class VistaNuovoCliente( QWidget ): # Apre la vista che permette di inserire un nuovo cliente nel sistema. def __init__(self, parent=None): super(VistaNuovoCliente, self).__init__(parent) self.controller = ControllerListaClienti() self.stylesheet_frame = """ QFrame{ background-color: white; border: 1px solid grey; } """ self.stylesheet_window = """ QWidget{ background-color: #efefef; } """ self.stylesheet_label = """ QLabel{ background-color: white; } QLineEdit{ background-color: white; border: 2px solid #dfdfdf } """ self.stylesheet_button_back = """ QPushButton{ border-radius: 15px; background-color: transparent; } QPushButton::Pressed{ background-color: transparent; } """ self.stylesheet_button = """ QPushButton{ background-color: #cc3234; color: white; border-radius: 15px; } QPushButton::Pressed{ background-color: grey } """ self.stylesheet_title = """ QLabel{ background-color: transparent; } """ self.stylesheet_calendar = """ QCalendarWidget QToolButton{ background-color : lightblue; } QCalendarWidget QWidget{ background-color : lightblue; } """ # Inserimento e impostazioni grafiche dell'immagine dello sfondo della finestra. self.imagePath = "Image/foto.png" self.image = QImage(self.imagePath) self.label = QLabel(self) self.label.setPixmap(QPixmap.fromImage(self.image)) self.label.setScaledContents(True) self.label.setGeometry(0, 0, 1250, 650) # Inserimento e impostazioni grafiche dell'etichetta 'Nuovo Cliente'. self.label = QLabel(self) self.font = QFont("Arial", 18, QFont.Bold) self.label.setText("Nuovo Cliente") self.label.setFont(self.font) self.label.setGeometry(50, 55, 300, 40) self.label.setStyleSheet(self.stylesheet_title) # Inserimento e impostazioni grafiche del frame nella finestra. self.frame = QFrame(self) self.frame.setStyleSheet(self.stylesheet_frame) self.frame.setGeometry(50, 100, 1150, 390) # Usa la funzione 'create_label1' e 'create_label2' per creare due colonne di etichette. self.create_label1("Nome", 150) self.create_label1("Cognome", 200) self.create_label1("Codice Fiscale", 250) self.create_label1("Indirizzo", 300) self.create_label1("Email", 350) self.create_label1("Telefono", 400) self.create_label2("Data di nascita", 150) # Inserimento e impostazioni grafiche delle caselle di testo per inserire le informazioni del nuovo cliente. self.edit_nome = QLineEdit(self) self.edit_nome.setGeometry(250, 150, 200, 30) self.edit_nome.setStyleSheet(self.stylesheet_label) self.edit_cognome = QLineEdit(self) self.edit_cognome.setGeometry(250, 200, 200, 30) self.edit_cognome.setStyleSheet(self.stylesheet_label) self.edit_cf = QLineEdit(self) self.edit_cf.setGeometry(250, 250, 200, 30) self.edit_cf.setStyleSheet(self.stylesheet_label) self.edit_indirizzo = QLineEdit(self) self.edit_indirizzo.setGeometry(250, 300, 200, 30) self.edit_indirizzo.setStyleSheet(self.stylesheet_label) self.edit_email = QLineEdit(self) self.edit_email.setGeometry(250, 350, 200, 30) self.edit_email.setStyleSheet(self.stylesheet_label) self.edit_telefono = QLineEdit(self) self.edit_telefono.setGeometry(250, 400, 200, 30) self.edit_telefono.setStyleSheet(self.stylesheet_label) self.edit_eta = QCalendarWidget(self) self.edit_eta.setGridVisible(True) self.edit_eta.setGeometry(630, 150, 500, 254) self.edit_eta.setStyleSheet(self.stylesheet_calendar) # Inserimento e impostazioni grafiche del radio button "Maschio". self.button_male = QRadioButton(self) self.button_male.setText("Uomo") self.button_male.setGeometry(800, 425, 100, 20) self.button_male.setStyleSheet('background-color: white') self.button_male.setChecked(True) # Inserimento e impostazioni grafiche del radio button "Femmina". self.button_female = QRadioButton(self) self.button_female.setText("Donna") self.button_female.setGeometry(950, 425, 100, 20) self.button_female.setStyleSheet('background-color: white') # Inserimento e impostazioni grafiche del bottone per tornare alla vista precedente. self.button_back = QPushButton(self) self.button_back.setIcon(QIcon('Image/back.png')) self.button_back.setIconSize(QSize(90, 90)) self.button_back.setGeometry(50, 520, 90, 90) self.button_back.setStyleSheet(self.stylesheet_button_back) self.button_back.clicked.connect(self.go_back) # Inserimento e impostazioni grafiche del bottone per salvare le informazioni inserite. self.button_new_cliente = QPushButton(self) self.button_new_cliente.setText("Salva") self.font_button = QFont("Times", 11) self.button_new_cliente.setFont(self.font_button) self.button_new_cliente.setGeometry(1050, 540, 120, 50) self.button_new_cliente.setStyleSheet(self.stylesheet_button) self.button_new_cliente.clicked.connect(self.salva_cliente) # Impostazioni grafiche generali della finestra del programma. self.setWindowTitle("Nuovo Cliente") self.setStyleSheet(self.stylesheet_window) self.resize(1250, 650) self.setFixedSize(self.size()) # == create_label1 == # La funzione crea un etichetta con nome inserito in input alla funzione e posizione nella finestra # presa anch'essa in input. La funzione gestisce anche le impostazioni grafiche dell'etichetta. # Le etichette create con questa funzione verranno collocate nella prima colonna. def create_label1(self, nome, posizione): self.label_edit = QLabel(self) self.label_edit.setText(nome) self.label_edit.setGeometry(80, posizione, 110, 20) self.label_edit.setStyleSheet(self.stylesheet_label) self.font_label = QFont("Times", 9) self.label_edit.setFont(self.font_label) # == create_label2 == # La funzione crea un etichetta con nome inserito in input alla funzione e posizione nella finestra # presa anch'essa in input. La funzione gestisce anche le impostazioni grafiche dell'etichetta. # Le etichette create con questa funzione verranno collocate nella seconda colonna. def create_label2(self, nome, posizione): self.label_edit = QLabel(self) self.label_edit.setText(nome) self.label_edit.setGeometry(500, posizione, 120, 20) self.label_edit.setStyleSheet(self.stylesheet_label) self.font_label = QFont("Times", 9) self.label_edit.setFont(self.font_label) # == salva_cliente == # La funzione ha il compito di salvare in 'Lista_clienti.json' le informazioni inserite # nelle varie caselle di testo. Dopodiché verrà aperta nuovamente la VistaListaClienti. def salva_cliente(self): if self.button_male.isChecked(): sesso = self.button_male.text() else: sesso = self.button_female.text() if self.edit_nome.text() == "" or self.edit_cognome.text() == "" or \ self.edit_indirizzo.text() == "" or self.edit_telefono.text() == "" or \ self.edit_eta.selectedDate().toString() == "" or sesso == "": QMessageBox.critical(self, "Errore", "Inserisci tutti i dati!", QMessageBox.Ok) return else: if len(self.edit_cf.text()) != 16: QMessageBox.critical(self, "Errore", "Il codice fiscale immesso non è valido", QMessageBox.Ok) self.edit_cf.clear() return if not "@" in self.edit_email.text(): QMessageBox.critical(self, "Errore", "l'indirizzo email immesso non è valido", QMessageBox.Ok) self.edit_email.clear() if not self.edit_telefono.text().isdigit(): QMessageBox.critical( self, "Errore", "il numero di telefono immesso non è valido", QMessageBox.Ok) self.edit_telefono.clear() else: self.controller.aggiungi_cliente( Cliente( self.edit_nome.text(), self.edit_cognome.text(), self.edit_cf.text(), self.edit_indirizzo.text(), self.edit_email.text(), self.edit_telefono.text(), self.edit_eta.selectedDate().toString("dd-MM-yyyy"), sesso)) self.go_lista_clienti = VistaListaClienti.VistaListaClienti() self.go_lista_clienti.show() self.close() # == go_back == # La funzione si occupa di aprire la finestra precedente. def go_back(self): self.go_lista_clienti = VistaListaClienti.VistaListaClienti() self.go_lista_clienti.show() self.close()