def calendar(tela, x, y, largura, altura): calendar_ = QCalendarWidget(tela) calendar_.setVerticalHeaderFormat(QCalendarWidget.NoVerticalHeader) calendar_.setGridVisible(True) calendar_.setGeometry(QRect(x, y, largura, altura)) return calendar_
class Cal(QMainWindow): def __init__(self, parent=None): super(Cal, self).__init__(parent) self.setWindowTitle("Choose Section Date") self.resize(310, 210) self.move(750, 250) self.Cale = QCalendarWidget(self) self.Cale.setVerticalHeaderFormat(self.Cale.NoVerticalHeader) self.Cale.move(5, 5) self.Cale.resize(300, 200) self.Cale.clicked()
def initUI(self): cal = QCalendarWidget(self) cal.setGridVisible(True) cal.setVerticalHeaderFormat( QCalendarWidget.VerticalHeaderFormat( QCalendarWidget.NoVerticalHeader)) cal.clicked[QDate].connect(self.showDate) # 한국 공휴일 캘린더 객체 생성 후 올해 기준으로 휴일을 3년간 Q캘린터에 표시 wcal = SouthKorea() date = QDate.currentDate() # 해당 연도의 공휴일을 리스트로 반환 # print(wcal.holidays(date.year())) # 공휴일 표시 서식 설정 fm = QTextCharFormat() fm.setForeground(Qt.red) # fm.setBackground(Qt.yellow) # 올해 기준 전년, 올해, 다음해까지 공휴일 표시 for one in wcal.holidays(date.year() - 1): print(one[0]) cal.setDateTextFormat(one[0], fm) for one in wcal.holidays(date.year()): print(one[0]) cal.setDateTextFormat(one[0], fm) for one in wcal.holidays(date.year() + 1): print(one[0]) cal.setDateTextFormat(one[0], fm) self.lbl = QLabel(self) date = cal.selectedDate() self.lbl.setText(date.toString()) self.lblmsg = QLabel(self) self.lblmsg.setText("강의 일정 계산") self.showDate(date) vbox = QVBoxLayout() vbox.addWidget(cal) vbox.addWidget(self.lbl) vbox.addWidget(self.lblmsg) self.setLayout(vbox) self.setWindowTitle('종강일 계산기') self.setGeometry(300, 300, 300, 300) self.show()
class VistaListaPrenotazioni(QWidget): def __init__(self, parent=None): super(VistaListaPrenotazioni, self).__init__(parent) self.g_layout = QGridLayout() self.label_prenotazioni_by_data = QLabel("\nSeleziona una data, poi premi 'Vai' per vedere gli arrivi alla data selezionata: \n") self.label_prenotazioni_by_data.setStyleSheet("font: 200 14pt \"Papyrus\";\n""color: rgb(0, 0, 0);\n" "background-color: rgb(178, 225, 255);\n" "selection-color: rgb(170, 255, 0);") self.g_layout.addWidget(self.label_prenotazioni_by_data, 0, 0) self.calendario = QCalendarWidget() self.calendario.setGridVisible(True) self.calendario.setVerticalHeaderFormat(QCalendarWidget.NoVerticalHeader) self.calendario.setMinimumDate(QDate(2021, 6, 1)) self.calendario.setMaximumDate(QDate(2021, 9, 15)) self.g_layout.addWidget(self.calendario, 1, 0) self.h_layout = QHBoxLayout() self.create_button("Mostra tutte", self.go_lista_prenotazioni, "background-color:#FFD800;") self.create_button("Vai", self.go_lista_prenotazioni_by_data, "background-color:#00FF00;") self.g_layout.addLayout(self.h_layout, 2, 0) self.setLayout(self.g_layout) self.resize(700, 600) self.setWindowTitle("Lista Prenotazioni") #Crea un bottone con i parametri passati e lo aggiunge al layout orizzontale dei bottoni def create_button(self, testo, comando, background_color): bottone = QPushButton(testo) bottone.setFont(QFont("Arial", 15, 1, True)) bottone.setStyleSheet(background_color) bottone.clicked.connect(comando) self.h_layout.addWidget(bottone) #Visualizza la lista delle prenotazioni che iniziano nella data selezionata nel calendario def go_lista_prenotazioni_by_data(self): data_inizio_q = self.calendario.selectedDate() self.data_inizio = datetime(data_inizio_q.year(), data_inizio_q.month(), data_inizio_q.day()) self.lista_prenotazioni_by_data = VistaListaPrenotazioniAdmin(self.data_inizio) self.lista_prenotazioni_by_data.show() #Visualizza la lista completa delle prenotazioni def go_lista_prenotazioni(self): self.lista_prenotazioni = VistaListaPrenotazioniAdmin() self.lista_prenotazioni.show()
# from PyQt5.QtGui import QSizePolicy # from PyQt5.QtCore import QJsonObject # from PyQt5.QtGui import * import sys print(sys.argv) widget = QWidget() layout = QVBoxLayout(widget) # pb = QPushButton(widget) # layout.addWidget(pb) # pb.setText("haha") # pb.setParent(widget) widget.setWindowTitle("plugin from Python") cal = QCalendarWidget() cal.setVerticalHeaderFormat(QCalendarWidget.NoVerticalHeader) # cal.setMaximumWidth(140) aux = cal.findChild(QTableView) aux.horizontalHeader().setSectionResizeMode(QHeaderView.ResizeMode.Fixed) # aux.horizontalHeader().setSectionResizeMode(QHeaderView.ResizeMode.Stretch) # aux.horizontalHeader().setSectionResizeMode(QHeaderView.ResizeMode.ResizeToContents) aux.horizontalHeader().setDefaultSectionSize(48) print(aux) # layout.addWidget(cal) # layout = QVBoxLayout(cal) widget = cal widget.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) # widget = QCalendarWidget() # layout = QVBoxLayout(widget) # widget.show()
class VistaNuovaPrenotazione(QWidget): def __init__(self, email_cliente, aggiorna_dati_prenotazioni, parent=None): super(VistaNuovaPrenotazione, self).__init__(parent) self.font = QFont("Arial", 16) self.email_cliente = email_cliente self.aggiorna_dati_prenotazioni = aggiorna_dati_prenotazioni self.layout = QGridLayout() # prenotazione data inizio vacanza self.label_inizio = QLabel("Seleziona la data di inizio della vacanza:") self.label_inizio.setStyleSheet("font: 200 14pt \"Papyrus\";\n""color: rgb(0, 0, 0);\n" "background-color: rgb(178, 225, 255);\n""selection-color: rgb(170, 255, 0);") self.layout.addWidget(self.label_inizio, 0, 0) self.calendario_inizio = QCalendarWidget() self.calendario_inizio.setGridVisible(True) self.calendario_inizio.setVerticalHeaderFormat(QCalendarWidget.NoVerticalHeader) if datetime.now() > datetime(2021, 6, 1): self.calendario_inizio.setMinimumDate(QDate(datetime.now().year, datetime.now().month, datetime.now().day)) else: self.calendario_inizio.setMinimumDate(QDate(2021, 6, 1)) self.calendario_inizio.setMaximumDate(QDate(2021, 9, 15)) cell_inizio_start = QTextCharFormat() cell_inizio_start.setBackground(QColor("yellow")) cell_inizio_stop = QTextCharFormat() cell_inizio_stop.setBackground(QColor("red")) self.calendario_inizio.setDateTextFormat(self.calendario_inizio.selectedDate(), cell_inizio_start) self.calendario_inizio.setDateTextFormat(QDate(2021,9,14), cell_inizio_stop) self.layout.addWidget(self.calendario_inizio, 1, 0) # prenotazione data fine vacanza self.label_fine = QLabel("Seleziona la data di fine della vacanza:") self.label_fine.setStyleSheet("font: 200 14pt \"Papyrus\";\n" "color: rgb(0, 0, 0);\n" "background-color: rgb(178, 225, 255);\n" "selection-color: rgb(170, 255, 0);") self.layout.addWidget(self.label_fine, 0, 1) self.calendario_fine = QCalendarWidget() self.calendario_fine.setGridVisible(True) self.calendario_fine.setVerticalHeaderFormat(QCalendarWidget.NoVerticalHeader) if datetime.now() > datetime(2021, 6, 1): self.calendario_fine.setMinimumDate(QDate(datetime.now().year, datetime.now().month, datetime.now().day)) else: self.calendario_fine.setMinimumDate(QDate(2021, 6, 1)) self.calendario_fine.setMaximumDate(QDate(2021, 9, 15)) cell_fine_stop = QTextCharFormat() cell_fine_stop.setBackground(QColor("red")) self.calendario_fine.setDateTextFormat(QDate(2021, 9, 15), cell_fine_stop) self.layout.addWidget(self.calendario_fine, 1, 1) # selezione numero di persone self.label_numero_persone = QLabel("Seleziona il numero di persone:") self.label_numero_persone.setStyleSheet("font: 200 14pt \"Papyrus\";\n" "color: rgb(0, 0, 0);\n" "background-color: rgb(178, 225, 255);\n" "selection-color: rgb(170, 255, 0);") self.layout.addWidget(self.label_numero_persone, 3, 0) # selezione tipologia di alloggio self.label_alloggio = QLabel("Seleziona il tipo di alloggio:") self.label_alloggio.setStyleSheet("font: 200 14pt \"Papyrus\";\n" "color: rgb(0, 0, 0);\n" "background-color: rgb(178, 225, 255);\n" "selection-color: rgb(170, 255, 0);") self.layout.addWidget(self.label_alloggio, 5, 0) # selezione tipologia di ristorazione self.label_ristorazione = QLabel("Seleziona il tipo di ristorazione:") self.label_ristorazione.setStyleSheet("font: 200 14pt \"Papyrus\";\n" "color: rgb(0, 0, 0);\n" "background-color: rgb(178, 225, 255);\n" "selection-color: rgb(170, 255, 0);") self.layout.addWidget(self.label_ristorazione, 8, 0) # selezione servizi aggiuntivi self.label_servizi_aggiuntivi = QLabel("Seleziona i servizi aggiunitvi:") self.label_servizi_aggiuntivi.setStyleSheet("font: 200 14pt \"Papyrus\";\n" "color: rgb(0, 0, 0);\n" "background-color: rgb(178, 225, 255);\n" "selection-color: rgb(170, 255, 0);") self.layout.addWidget(self.label_servizi_aggiuntivi, 3, 1) self.get_servizi() # bottone finale di conferma self.bottone_conferma = QPushButton("Conferma") self.bottone_conferma.setFont(QFont("Arial", 15, 15, True)) self.bottone_conferma.setStyleSheet("background-color: rgb(0,255,0);") self.bottone_conferma.clicked.connect(self.aggiungi_prenotazione) self.shortcut_open = QShortcut(QKeySequence('Return'), self) self.shortcut_open.activated.connect(self.aggiungi_prenotazione) self.layout.addWidget(self.bottone_conferma, 9, 1) self.setLayout(self.layout) self.resize(1000, 600) self.setWindowTitle("Aggiungi Prenotazione") def get_servizi(self): self.liste_servizi = ListeServizi() self.font_combo_box = QFont("Arial", 12) # menu a tendina per stabilire il servizio di aloggio self.menu_alloggio = QComboBox() self.menu_alloggio.setFont(self.font_combo_box) self.model_menu_alloggio = QStandardItemModel(self.menu_alloggio) # menu a tendina per stabilire il numero di persone self.menu_numero_persone = QComboBox() self.menu_numero_persone.setFont(self.font_combo_box) self.model_menu_numero_persone = QStandardItemModel(self.menu_numero_persone) for servizio_alloggio in self.liste_servizi.get_servizi_alloggio(): item = QStandardItem() item.setText(servizio_alloggio.nome + "(max " + str(servizio_alloggio.numero_persone_max) + " persone)") item.setEditable(False) self.model_menu_alloggio.appendRow(item) self.menu_alloggio.setModel(self.model_menu_alloggio) for numero in [1, 2, 3, 4, 5, 6, 7, 8]: item = QStandardItem() item.setText(str(numero)) item.setEditable(False) self.model_menu_numero_persone.appendRow(item) self.menu_numero_persone.setModel(self.model_menu_numero_persone) self.layout.addWidget(self.menu_alloggio, 6, 0) self.layout.addWidget(self.menu_numero_persone, 4, 0) # menu a tendina per stabilire il servizio ristorazione self.menu_ristorazione = QComboBox() self.menu_ristorazione.setFont(self.font_combo_box) self.model_menu_ristorazione = QStandardItemModel(self.menu_ristorazione) for servizio_ristorazione in self.liste_servizi.get_servizi_ristorazione(): item = QStandardItem() item.setText(servizio_ristorazione.nome) item.setEditable(False) self.model_menu_ristorazione.appendRow(item) self.menu_ristorazione.setModel(self.model_menu_ristorazione) self.layout.addWidget(self.menu_ristorazione, 9, 0) #Checkbox servizi agginitivi self.checkbox_noleggio = QCheckBox("Noleggio Mezzi Elettrici") self.checkbox_noleggio.setFont(self.font_combo_box) self.layout.addWidget(self.checkbox_noleggio, 4, 1) self.checkbox_spa = QCheckBox("Centro Benessere") self.checkbox_spa.setFont(self.font_combo_box) self.layout.addWidget(self.checkbox_spa, 5, 1) self.checkbox_escursione = QCheckBox("Escursione Turistica") self.checkbox_escursione.setFont(self.font_combo_box) self.layout.addWidget(self.checkbox_escursione, 6, 1) #Controlla i dati inseriti nella prenotazione e se sono corretti registra la prenotazione def aggiungi_prenotazione(self): #Trasforma le date prese dal calendario da QDate a datetime data_inizio_q = self.calendario_inizio.selectedDate() data_inizio = datetime(data_inizio_q.year(), data_inizio_q.month(), data_inizio_q.day()) data_fine_q = self.calendario_fine.selectedDate() data_fine = datetime(data_fine_q.year(), data_fine_q.month(), data_fine_q.day()) #Controlla che la data di fine non sai precedente a quella di inizio if data_fine <= data_inizio: QMessageBox.critical(self, "Errore", "La data di fine non può essere precedente la data di inizio della vacanza", QMessageBox.Ok, QMessageBox.Ok) return #Controlla che la data di inizio della prenotazione sia almeno domani if data_inizio == datetime(datetime.now().year, datetime.now().month, datetime.now().day): QMessageBox.critical(self, "Errore", "La prenotazione non può partire da oggi", QMessageBox.Ok, QMessageBox.Ok) return #COntrolla che la prenotazione duri almeno 3 giorni if data_fine-data_inizio < timedelta(days=3): QMessageBox.critical(self, "Errore", "La prenotazione deve essere di almeno 3 giorni", QMessageBox.Ok, QMessageBox.Ok) return #indici dei servizi selezionati servizio_alloggio = self.liste_servizi.get_servizi_alloggio()[self.menu_alloggio.currentIndex()] numero_persone = self.menu_numero_persone.currentIndex()+1 servizio_ristorazione = self.liste_servizi.get_servizi_ristorazione()[self.menu_ristorazione.currentIndex()] servizi_aggiuntivi = [] if self.checkbox_noleggio.isChecked(): servizi_aggiuntivi.append(self.liste_servizi.get_servizi_aggiuntivi()[0]) if self.checkbox_escursione.isChecked(): servizi_aggiuntivi.append(self.liste_servizi.get_servizi_aggiuntivi()[1]) if self.checkbox_spa.isChecked(): servizi_aggiuntivi.append(self.liste_servizi.get_servizi_aggiuntivi()[2]) #Controlla la disponibilità dell'alloggio per le date selezionate if not self.controlla_disponibilita(data_inizio, data_fine, servizio_alloggio): QMessageBox.critical(self, "Ci Dispiace", "Nelle date per le quali vuoi prenotare non sono disponibili posti per il tipo di alloggio scelto", QMessageBox.Ok, QMessageBox.Ok) return #In base al valore ritornato dalla funzione controlla_disponibilità, assegna un codice all'ombrellone del cliente if servizio_alloggio.nome == "Suite" or servizio_alloggio.nome == "Bungalow": codice_ombrellone = str(self.controlla_disponibilita(data_inizio, data_fine, servizio_alloggio)) + servizio_alloggio.nome[0] else: codice_ombrellone = str(self.controlla_disponibilita(data_inizio, data_fine, servizio_alloggio)) + servizio_alloggio.nome[0] + servizio_alloggio.nome[7] #Controlla che il numero di persone inserite sia inferiore al numero di persone massimo per il tipo di alloggio scelto if numero_persone > servizio_alloggio.numero_persone_max: QMessageBox.critical(self, "Errore", "Il numero di persone selezionato è troppo alto per il tipo di alloggio scelto", QMessageBox.Ok, QMessageBox.Ok) return prenotazione = Prenotazione(self.email_cliente, data_inizio, data_fine, numero_persone, servizio_ristorazione, servizio_alloggio, servizi_aggiuntivi, codice_ombrellone) #Chiede la conferma per la prenotazione risposta = QMessageBox.question(self, "Conferma", "Il costo della prenotazione è " + str(prenotazione.get_prezzo_totale()) + " € totali. \nDovrai versare una caparra di " + str(prenotazione.get_prezzo_totale()*20/100.0) + " €. \n\nConfermare?", QMessageBox.Yes, QMessageBox.No) if risposta == QMessageBox.No: return else: controllore_lista_prenotazioni = ControlloreListaPrenotazioni() controllore_lista_prenotazioni.aggiungi_prenotazione(prenotazione) QMessageBox.about(self, "Confermata", "La Prenotazione è stata Confermata") controllore_lista_prenotazioni.save_data() self.aggiorna_dati_prenotazioni() self.close() #Controlla la disponibilità dell'alloggio scelto nel periodo selezionato e in caso di disponibilità ritorna il numero #degli alloggi dello stesso tipo occupati nel primo giorno della prenotazione #Questo ritorno verrà utilizzato per assegnare il codice dell'ombrellone def controlla_disponibilita(self, data_inizio, data_fine, servizio_alloggio): controllore_lista_prenotazioni = ControlloreListaPrenotazioni() one_day = timedelta(days=1) data_controllo = data_inizio numero_ombrellone = 0 disponibilita_giornaliera_alloggio = servizio_alloggio.disponibilita_giornaliera while data_controllo <= data_fine: disponibilita_giornaliera_rimanente = disponibilita_giornaliera_alloggio for prenotazione in controllore_lista_prenotazioni.get_lista_prenotazioni(): if data_controllo >= prenotazione.data_inizio and data_controllo <= prenotazione.data_fine and prenotazione.servizio_alloggio == servizio_alloggio: disponibilita_giornaliera_rimanente = disponibilita_giornaliera_rimanente-1 if disponibilita_giornaliera_rimanente < 1: return False if data_controllo == data_inizio: numero_ombrellone = disponibilita_giornaliera_rimanente data_controllo = data_controllo + one_day return numero_ombrellone
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 DecisionMakerControls(QWidget): # DecisionMakerControls class constructor def __init__(self, parent): # Call superclass constructor super().__init__() # Save parent instance self.parent = parent # Slider box slider_box = QVBoxLayout() slider_box.addWidget( DecisionMakerSlider('How hungry are you?', parent.setHungerLevel)) slider_box.addWidget( DecisionMakerSlider('Thirsty?', parent.setThirstLevel)) slider_box.addWidget( DecisionMakerSlider('Energy level?', parent.setEnergyLevel)) slider_box.addWidget( DecisionMakerSlider('Introversion level?', parent.setIntrovertLevel)) slider_box.addWidget( DecisionMakerSlider('Stress level?', parent.setStressLevel)) # Box containing calendar control, time control, weather control, alone toggle and retrograde toggle right_box = QVBoxLayout() # Box containing all of the above minus calendar #lowerright_box = QHBoxLayout() # Box containing labels for contorl in lower right box #lowerright_label_box = QVBoxLayout() # Box containing controls in lower right box #lowerright_control_box = QVBoxLayout() # Calendar control self.calendar = QCalendarWidget() self.calendar.setHorizontalHeaderFormat( QCalendarWidget.SingleLetterDayNames) self.calendar.setVerticalHeaderFormat(QCalendarWidget.NoVerticalHeader) self.calendar.selectionChanged.connect(self.calendarChanged) self.calendar.setFixedWidth(325) right_box.addWidget(self.calendar) # Save today's date self.today = self.calendar.selectedDate() # Initialize day and year self.parent.setDay(self.today.dayOfWeek() - 1) # Limit year to +- 100 form current year = self.today.year() if (year > 100): year = 100 elif (year < -100): year = -100 self.parent.setYear(year) # Time control time_box = QHBoxLayout() time_label = QLabel('What time is it?', self) self.time_combo = QComboBox() self.time_combo.addItems( ['1:00', '2:00', '3:00', '4:00', '5:00', '6:00', \ '7:00', '8:00', '9:00', '10:00', '11:00', '12:00' ] ) hour = QTime.currentTime().hour() - 1 hour_convert = hour if (hour_convert < 0): hour_convert = 23 if (hour_convert > 12): hour_convert -= 12 self.time_combo.setCurrentIndex(hour_convert) self.time_combo.currentIndexChanged.connect(self.comboChanged) self.ampm_combo = QComboBox() self.ampm_combo.addItems(['AM', 'PM']) if (hour > 12): self.ampm_combo.setCurrentIndex(1) else: self.ampm_combo.setCurrentIndex(0) self.ampm_combo.currentIndexChanged.connect(self.comboChanged) self.parent.setTime(hour) time_box.addWidget(time_label) time_box.addWidget(self.time_combo) time_box.addWidget(self.ampm_combo) right_box.addLayout(time_box) # Weather control weather_box = QHBoxLayout() weather_label = QLabel('What\'s the weather like?', self) self.weather_combo = QComboBox() self.weather_combo.addItems( ['Sunny', 'Cloudy', 'Raining', 'Snowing', 'Natural Disaster']) self.weather_combo.currentIndexChanged.connect(self.comboChanged) weather_box.addWidget(weather_label) weather_box.addWidget(self.weather_combo) right_box.addLayout(weather_box) # Alone toggle button alone_box = QHBoxLayout() alone_label = QLabel('Are you alone, or with someone else?', self) self.button_alone = QPushButton('Alone') self.button_alone.setCheckable(True) self.button_alone.clicked.connect(self.buttonClicked) alone_box.addWidget(alone_label) alone_box.addWidget(self.button_alone) right_box.addLayout(alone_box) # Retrograde toggle button retrograde_box = QHBoxLayout() retrograde_label = QLabel('Is Mercury in retrograde?', self) self.button_retrograde = QPushButton('Nope') self.button_retrograde.setCheckable(True) self.button_retrograde.clicked.connect(self.buttonClicked) retrograde_box.addWidget(retrograde_label) retrograde_box.addWidget(self.button_retrograde) right_box.addLayout(retrograde_box) # Color palette self.setAutoFillBackground(True) palette = self.palette() palette.setColor(self.backgroundRole(), Qt.white) self.setPalette(palette) # Set up layout hbox = QHBoxLayout() hbox.addLayout(slider_box) hbox.insertSpacing(1, 25) hbox.addLayout(right_box) hbox.setSizeConstraint(QLayout.SetFixedSize) self.setLayout(hbox) # Button event handler def buttonClicked(self): sender = self.sender() if (sender == self.button_alone): if (self.button_alone.isChecked()): self.button_alone.setText('With someone else') self.parent.setAlone(1) else: self.button_alone.setText('Alone') self.parent.setAlone(0) elif (sender == self.button_retrograde): if (self.button_retrograde.isChecked()): self.button_retrograde.setText('Maybe?') self.parent.setRetrograde(1) else: self.button_retrograde.setText('Nope') self.parent.setRetrograde(0) # Cobobox event handler def comboChanged(self): sender = self.sender() if ((sender == self.time_combo) or (sender == self.ampm_combo)): hour = self.time_combo.currentIndex() + 1 if (hour == 13): hour = 0 time = (hour + 12 * self.ampm_combo.currentIndex()) self.parent.setTime(time) if (sender == self.weather_combo): self.parent.setWeather(self.weather_combo.currentIndex()) # Calendar event handler def calendarChanged(self): sender = self.sender() if (sender == self.calendar): date = self.calendar.selectedDate() self.parent.setDay(date.dayOfWeek() - 1) year = date.year() # Limit year to +- 100 form current year = year - self.today.year() if (year > 100): year = 100 elif (year < -100): year = -100 self.parent.setYear(year)
class VistaResoconto(QWidget): def __init__(self): super(VistaResoconto, self).__init__() self.spese_aggiuntive = [] # periodo totale di cui è possibile richiedere il resoconto self.data_inizio = QDate(2021, 6, 1) self.data_fine = QDate(2021, 9, 15) self.layout = QGridLayout() # periodo inizio resoconto self.label_inizio = QLabel("Periodo iniziale:") self.label_inizio.setStyleSheet("font: 200 14pt \"Papyrus\";\n""color: rgb(0, 0, 0);\n" "background-color: rgb(178, 225, 255);\n""selection-color: rgb(170, 255, 0);") self.layout.addWidget(self.label_inizio, 0, 0) self.calendario_inizio = QCalendarWidget() self.calendario_inizio.setGridVisible(True) self.calendario_inizio.setVerticalHeaderFormat(QCalendarWidget.NoVerticalHeader) self.calendario_inizio.setMinimumDate(self.data_inizio) self.calendario_inizio.setMaximumDate(self.data_fine) self.layout.addWidget(self.calendario_inizio, 1, 0) # periodo fine resoconto self.label_fine = QLabel("Periodo finale:") self.label_fine.setStyleSheet("font: 200 14pt \"Papyrus\";\n" "color: rgb(0, 0, 0);\n" "background-color: rgb(178, 225, 255);\n" "selection-color: rgb(170, 255, 0);") self.layout.addWidget(self.label_fine, 0, 1) self.calendario_fine = QCalendarWidget() self.calendario_fine.setGridVisible(True) self.calendario_fine.setVerticalHeaderFormat(QCalendarWidget.NoVerticalHeader) self.calendario_fine.setMinimumDate(self.data_inizio) self.calendario_fine.setMaximumDate(self.data_fine) self.layout.addWidget(self.calendario_fine, 1, 1) # bottone "calcola resoconto" self.bottone_resoconto = QPushButton("Calcola Resoconto") self.bottone_resoconto.setStyleSheet("background-color: rgb(170, 255, 0);""font: 15pt \"Arial\";") self.bottone_resoconto.clicked.connect(self.mostra_resoconto) self.layout.addWidget(self.bottone_resoconto, 4, 1) # label altre spese self.label_altre_spese = QLabel("Inserisci le spese aggiuntive: ") self.label_altre_spese.setStyleSheet("font: 200 14pt \"Papyrus\";\n""color: rgb(0, 0, 0);\n" "background-color: rgb(178, 225, 255);\n""selection-color: rgb(170, 255, 0);") self.layout.addWidget(self.label_altre_spese, 2, 0) # aggiungi altre spese self.altre_spese = QLineEdit() self.altre_spese.setFont(QFont("Arial", 10)) self.layout.addWidget(self.altre_spese, 3, 0) self.bottone_aggiungi_spesa = QPushButton("Aggiungi spesa") self.bottone_aggiungi_spesa.clicked.connect(self.aggiungi_spesa) self.bottone_aggiungi_spesa.setFont(QFont("Arial", 12)) self.layout.addWidget(self.bottone_aggiungi_spesa, 3, 1) self.setLayout(self.layout) self.setWindowTitle("Resoconto") self.rect = self.frameGeometry() self.setGeometry(self.rect) #Mostra la tabella del resoconto calcolato tra le date selezionate def mostra_resoconto(self): data_inizio_q = self.calendario_inizio.selectedDate() data_inizio = datetime(data_inizio_q.year(), data_inizio_q.month(), data_inizio_q.day()) data_fine_q = self.calendario_fine.selectedDate() data_fine = datetime(data_fine_q.year(), data_fine_q.month(), data_fine_q.day()) #Controlla che la data di fine del periodo del resoconto non sia precedente a quella di inizio if data_fine < data_inizio: QMessageBox.critical(self, "Errore", "Il periodo finale non può essere precedente al periodo iniziale da resocontare", QMessageBox.Ok, QMessageBox.Ok) return self.tabella_resoconto = VistaTabellaResoconto(data_inizio, data_fine, self.spese_aggiuntive) self.tabella_resoconto.show() #Aggiunge una spesa alla lista delle spese aggiuntive che verranno poi considerate nel resoconto def aggiungi_spesa(self): try: spesa = float(self.altre_spese.text()) self.spese_aggiuntive.append(spesa) except: QMessageBox.critical(self, "Errore", "Inserisci solo dei numeri", QMessageBox.Ok) return self.altre_spese.setText("")
class mainwindow(QWidget): def __init__(self, username, dataoptions, driver, semesters): self.username = username self.dataoptions = dataoptions self.driver = driver self.semesters = semesters self.subThread = submitThread(self) self.subThread.finished.connect(self.completed) super().__init__() self.initUI() def initUI(self): self.center() #add the data type label and C C C combobox self.datatypelabel = QLabel(self) self.datatypelabel.setText("Data Pull Type") self.datatypelabel.setAlignment(Qt.AlignCenter) self.datacombo = QComboBox(self) #Sorted by alphabet self.datacombo.addItems(sorted(self.dataoptions.keys())) self.datacombo.currentTextChanged.connect(self.combochange) #add the filter label self.filterlabel = QLabel(self) self.filterlabel.setText('Filters') self.filterlabel.setAlignment(Qt.AlignCenter) #add all of the other filter things self.usernamelabel = QLabel(self) self.usernamelabel.setText("Created By: ") self.usernamecombo = QComboBox(self) self.assignedlabel = QLabel(self) self.assignedlabel.setText("Assigned To: ") self.assignedcombo = QComboBox(self) self.locationlabel = QLabel(self) self.locationlabel.setText("Location: ") self.locationcombo = QComboBox(self) self.categorylabel = QLabel(self) self.categorylabel.setText("Category: ") self.categorycombo = QComboBox(self) self.statuslabels = QLabel(self) self.statuslabels.setText("Status: ") self.statuscombo = QComboBox(self) #add the startdate and end date calendars self.startcal = QCalendarWidget(self) self.startcal.setSelectedDate(date.today() - timedelta(days=30)) self.startcal.setVerticalHeaderFormat(QCalendarWidget.NoVerticalHeader) self.startcal.setGridVisible(True) self.startcal.clicked.connect(self.startdatechange) self.startlabel = QLabel(self) self.startlabel.setText("Start Date: " + self.startcal.selectedDate().toString()) self.startdroplabel = QLabel(self) self.startdroplabel.setText('Autoselect start of : ') self.startdroplabel.setObjectName('desctext') self.startcombo = QComboBox(self) self.startcombo.addItems(self.semesters.keys()) self.startcombo.currentTextChanged.connect(self.startcomboselect) self.endcal = QCalendarWidget(self) self.endcal.setSelectedDate(date.today()) self.endcal.setVerticalHeaderFormat(QCalendarWidget.NoVerticalHeader) self.endcal.setGridVisible(True) self.endcal.clicked.connect(self.enddatechange) self.endlabel = QLabel(self) self.endlabel.setText("End Date: " + self.endcal.selectedDate().toString()) self.enddroplabel = QLabel(self) self.enddroplabel.setText('Autoselect end of : ') self.enddroplabel.setObjectName('desctext') self.endcombo = QComboBox(self) self.endcombo.addItems(self.semesters.keys()) self.endcombo.currentTextChanged.connect(self.endcomboselect) #create the maxreturns things self.maxlabel = QLabel(self) self.maxlabel.setText("Max Returns: ") self.maxlabel.hide() self.maxbox = QLineEdit(self) self.maxbox.setText('10000000') self.maxbox.hide() #add close button self.closebutton = QPushButton('Close', self) self.closebutton.clicked.connect(self.close) #add submit button self.submitbutton = QPushButton('Submit', self) self.submitbutton.clicked.connect(self.subThread.start) self.tabs = QTabWidget() #everything for the data pull tab self.datapulltab = QWidget() datatypelabhbox = QHBoxLayout() datatypelabhbox.addWidget(self.datatypelabel) datatypehbox = QHBoxLayout() datatypehbox.addWidget(self.datacombo) filternamehbox = QHBoxLayout() filternamehbox.addWidget(self.filterlabel) usernamehbox = QHBoxLayout() usernamehbox.addWidget(self.usernamelabel) assignedhbox = QHBoxLayout() assignedhbox.addWidget(self.assignedlabel) locationhbox = QHBoxLayout() locationhbox.addWidget(self.locationlabel) categoryhbox = QHBoxLayout() categoryhbox.addWidget(self.categorylabel) statushbox = QHBoxLayout() statushbox.addWidget(self.statuslabels) dataselectlayout = QVBoxLayout() dataselectlayout.addLayout(datatypelabhbox) dataselectlayout.addLayout(datatypehbox) verticalSpacer = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding) dataselectlayout.addSpacerItem(verticalSpacer) dataselectlayout.addLayout(filternamehbox) dataselectlayout.addLayout(usernamehbox) dataselectlayout.addWidget(self.usernamecombo) dataselectlayout.addLayout(assignedhbox) dataselectlayout.addWidget(self.assignedcombo) dataselectlayout.addLayout(locationhbox) dataselectlayout.addWidget(self.locationcombo) dataselectlayout.addLayout(categoryhbox) dataselectlayout.addWidget(self.categorycombo) dataselectlayout.addLayout(statushbox) dataselectlayout.addWidget(self.statuscombo) dataselectlayout.setSpacing(3) dataselectlayout.addStretch(1) startdrophlayout = QHBoxLayout() startdrophlayout.addWidget(self.startdroplabel) startdrophlayout.addWidget(self.startcombo) startdrophlayout.setSpacing(0) startdrophlayout.addStretch(0) enddropylayout = QHBoxLayout() enddropylayout.addWidget(self.enddroplabel) enddropylayout.addWidget(self.endcombo) enddropylayout.setSpacing(0) enddropylayout.addStretch(0) calendarlayout = QVBoxLayout() calendarlayout.addWidget(self.startlabel) calendarlayout.addLayout(startdrophlayout) calendarlayout.addWidget(self.startcal) calendarlayout.addSpacing(10) calendarlayout.addWidget(self.endlabel) calendarlayout.addLayout(enddropylayout) calendarlayout.addWidget(self.endcal) calendarlayout.setSpacing(3) calendarlayout.addStretch(1) datapullhlayout = QHBoxLayout() datapullhlayout.addLayout(dataselectlayout) datapullhlayout.addSpacing(10) datapullhlayout.addLayout(calendarlayout) datapullvlayout = QVBoxLayout() datapullvlayout.addSpacing(15) datapullvlayout.addLayout(datapullhlayout) self.datapulltab.setLayout(datapullvlayout) #Report things? self.reporttab = QWidget() self.startrepcal = QCalendarWidget(self) self.startrepcal.setSelectedDate(date.today() - timedelta(days=30)) self.startrepcal.setVerticalHeaderFormat( QCalendarWidget.NoVerticalHeader) self.startrepcal.setGridVisible(True) self.startrepcal.clicked.connect(self.startrepdatechange) self.startreplabel = QLabel(self) self.startreplabel.setText("Start Date: " + self.startrepcal.selectedDate().toString()) self.endrepcal = QCalendarWidget(self) self.endrepcal.setSelectedDate(date.today()) self.endrepcal.setVerticalHeaderFormat( QCalendarWidget.NoVerticalHeader) self.endrepcal.setGridVisible(True) self.endrepcal.clicked.connect(self.endrepdatechange) self.endreplabel = QLabel(self) self.endreplabel.setText("End Date: " + self.endrepcal.selectedDate().toString()) self.reporttypelabel = QLabel(self) self.reporttypelabel.setText('Report Type') self.reporttypelabel.setAlignment(Qt.AlignCenter) self.reportdrop = QComboBox(self) self.reportdrop.addItems([x.name for x in report.report_list]) self.reportdrop.currentTextChanged.connect(self.reportcombochange) self.reportactivelabel = QLabel(self) self.reportactivelabel.setText("Active") self.reportactive = QLabel(self) self.reportactive.setText("") self.reportactive.setObjectName('desctext') self.reportauthorlabel = QLabel(self) self.reportauthorlabel.setText("Author") self.reportauthor = QLabel(self) self.reportauthor.setText("") self.reportauthor.setObjectName('desctext') self.reportdesclabel = QLabel(self) self.reportdesclabel.setText("Report Description") self.descbox = QLabel(self) self.descbox.setText("") self.descbox.setWordWrap(True) self.descbox.setFixedWidth(self.usernamecombo.frameGeometry().width() + 53) self.descbox.setObjectName('desctext') self.startrepdroplabel = QLabel(self) self.startrepdroplabel.setObjectName('desctext') self.startrepdroplabel.setText('Autoselect start of : ') self.startrepcombo = QComboBox(self) self.startrepcombo.addItems(self.semesters.keys()) self.startrepcombo.currentTextChanged.connect(self.startrepcomboselect) self.enddropreplabel = QLabel(self) self.enddropreplabel.setText('Autoselect end of : ') self.enddropreplabel.setObjectName('desctext') self.endrepcombo = QComboBox(self) self.endrepcombo.addItems(self.semesters.keys()) self.endrepcombo.currentTextChanged.connect(self.endrepcomboselect) newreportlayout = QVBoxLayout() newreportlayout.addWidget(self.reporttypelabel) newreportlayout.addWidget(self.reportdrop) verticalSpacernew = QSpacerItem(10, 20, QSizePolicy.Minimum, QSizePolicy.Expanding) newreportlayout.addSpacerItem(verticalSpacernew) newreportlayout.addWidget(self.reportauthorlabel) newreportlayout.addWidget(self.reportauthor) verticalSpacernewest = QSpacerItem(10, 20, QSizePolicy.Minimum, QSizePolicy.Expanding) newreportlayout.addSpacerItem(verticalSpacernewest) newreportlayout.addWidget(self.reportactivelabel) newreportlayout.addWidget(self.reportactive) verticalSpacernewer = QSpacerItem(10, 20, QSizePolicy.Minimum, QSizePolicy.Expanding) newreportlayout.addSpacerItem(verticalSpacernewer) newreportlayout.addWidget(self.reportdesclabel) newreportlayout.addWidget(self.descbox) newreportlayout.setSpacing(3) newreportlayout.addStretch(1) startrepdrophlayout = QHBoxLayout() startrepdrophlayout.addWidget(self.startrepdroplabel) startrepdrophlayout.addWidget(self.startrepcombo) startrepdrophlayout.setSpacing(0) startrepdrophlayout.addStretch(0) endrepdropylayout = QHBoxLayout() endrepdropylayout.addWidget(self.enddropreplabel) endrepdropylayout.addWidget(self.endrepcombo) endrepdropylayout.setSpacing(0) endrepdropylayout.addStretch(0) repcallayout = QVBoxLayout() repcallayout.addWidget(self.startreplabel) repcallayout.addLayout(startrepdrophlayout) repcallayout.addWidget(self.startrepcal) repcallayout.addSpacing(10) repcallayout.addWidget(self.endreplabel) repcallayout.addLayout(endrepdropylayout) repcallayout.addWidget(self.endrepcal) repcallayout.setSpacing(3) repcallayout.addStretch(1) reportouterlayout = QHBoxLayout() reportouterlayout.addLayout(newreportlayout) reportouterlayout.addSpacing(10) reportouterlayout.addLayout(repcallayout) reportouterlayoutout = QVBoxLayout() reportouterlayoutout.addSpacing(15) reportouterlayoutout.addLayout(reportouterlayout) self.reporttab.setLayout(reportouterlayoutout) self.tabs.addTab(self.datapulltab, "Data Pull") self.tabs.addTab(self.reporttab, "Reporting") buttonlayout = QHBoxLayout() buttonlayout.addWidget(self.closebutton) buttonlayout.addWidget(self.submitbutton) self.statuslabel = QLabel(self) self.statuslabel.setText("Ready") self.statuslabel.setObjectName('statuslabel') self.statuslabel.setAlignment(Qt.AlignRight) outerlayout = QVBoxLayout() outerlayout.addWidget(self.tabs) outerlayout.addSpacing(15) outerlayout.addLayout(buttonlayout) outerlayout.addWidget(self.statuslabel) self.setLayout(outerlayout) self.current_report = False self.dframe = False self.reportcombochange() self.combochange() self.setWindowTitle('PIEthon: logged in as ' + self.username) self.setWindowIcon( QIcon(functions.resource_path('resources\\PIEcon.png'))) #style things self.setStyleSheet( open(functions.resource_path("resources\\iu_stylesheet.qss"), "r").read()) self.show() def center(self): qr = self.frameGeometry() cp = QDesktopWidget().availableGeometry().center() qr.moveCenter(cp) self.move(qr.topLeft()) def statusUpdate(self, newstat): #print('in status update') self.statuslabel.setText(newstat) QCoreApplication.processEvents() def startdatechange(self): self.startcombo.setCurrentIndex(0) self.startlabel.setText("Start Date: " + self.startcal.selectedDate().toString()) self.startreplabel.setText("Start Date: " + self.startcal.selectedDate().toString()) self.startrepcal.setSelectedDate(self.startcal.selectedDate()) def enddatechange(self): self.endcombo.setCurrentIndex(0) self.endlabel.setText("End Date: " + self.endcal.selectedDate().toString()) self.endreplabel.setText("End Date: " + self.endcal.selectedDate().toString()) self.endrepcal.setSelectedDate(self.endcal.selectedDate()) def startrepdatechange(self): self.startrepcombo.setCurrentIndex(0) self.startreplabel.setText("Start Date: " + self.startrepcal.selectedDate().toString()) self.startlabel.setText("Start Date: " + self.startrepcal.selectedDate().toString()) self.startcal.setSelectedDate(self.startrepcal.selectedDate()) def endrepdatechange(self): self.endrepcombo.setCurrentIndex(0) self.endreplabel.setText("End Date: " + self.endrepcal.selectedDate().toString()) self.endlabel.setText("End Date: " + self.endrepcal.selectedDate().toString()) self.endcal.setSelectedDate(self.endrepcal.selectedDate()) def startcomboselect(self): self.startrepcombo.setCurrentIndex(self.startcombo.currentIndex()) conv = self.semesters[self.startcombo.currentText()].getStart() if conv == '': return self.startlabel.setText("Start Date: " + conv.strftime('%a %b %d %Y')) self.startreplabel.setText("Start Date: " + conv.strftime('%a %b %d %Y')) self.startcal.setSelectedDate(conv) self.startrepcal.setSelectedDate(conv) def endcomboselect(self): self.endrepcombo.setCurrentIndex(self.endcombo.currentIndex()) conv = self.semesters[self.endcombo.currentText()].getEnd() if conv == '': return self.endlabel.setText("End Date: " + conv.strftime('%a %b %d %Y')) self.endreplabel.setText("End Date: " + conv.strftime('%a %b %d %Y')) self.endcal.setSelectedDate(conv) self.endrepcal.setSelectedDate(conv) def startrepcomboselect(self): self.startcombo.setCurrentIndex(self.startrepcombo.currentIndex()) conv = self.semesters[self.startrepcombo.currentText()].getStart() if conv == '': return self.startreplabel.setText("Start Date: " + conv.strftime('%a %b %d %Y')) self.startlabel.setText("Start Date: " + conv.strftime('%a %b %d %Y')) self.startrepcal.setSelectedDate(conv) self.startcal.setSelectedDate(conv) def endrepcomboselect(self): self.endcombo.setCurrentIndex(self.endrepcombo.currentIndex()) conv = self.semesters[self.endrepcombo.currentText()].getEnd() if conv == '': return self.endreplabel.setText("End Date: " + conv.strftime('%a %b %d %Y')) self.endlabel.setText("End Date: " + conv.strftime('%a %b %d %Y')) self.endrepcal.setSelectedDate(conv) self.endcal.setSelectedDate(conv) def reportcombochange(self): self.current_report = report.report_list[ self.reportdrop.currentIndex()] self.descbox.setText(self.current_report.description) self.reportactive.setText(str(self.current_report.active)) self.reportauthor.setText(str(self.current_report.author)) def combochange(self): datatype = self.dataoptions.get(self.datacombo.currentText()) if (datatype is None): return if (len(datatype.createdbyDict) > 1): self.usernamecombo.clear() self.usernamecombo.addItems(datatype.createdbyDict.keys()) self.usernamecombo.setEnabled(True) if datatype.createdbyPost: self.usernamelabel.setText("Created By (POST): ") else: self.usernamelabel.setText("Created By: ") else: self.usernamelabel.setText("Created By: ") self.usernamecombo.clear() self.usernamecombo.setEnabled(False) if (len(datatype.locationDict) > 1): self.locationcombo.clear() self.locationcombo.addItems(datatype.locationDict.keys()) self.locationcombo.setEnabled(True) if datatype.locationPost: self.locationlabel.setText("Location (POST): ") else: self.locationlabel.setText("Location: ") else: self.locationlabel.setText("Location: ") self.locationcombo.clear() self.locationcombo.setEnabled(False) if (len(datatype.statusDict) > 1): self.statuscombo.clear() self.statuscombo.addItems(datatype.statusDict) self.statuscombo.setEnabled(True) if datatype.statusPost: self.statuslabels.setText("Status (POST):") else: self.statuslabels.setText("Status:") else: self.statuslabels.setText("Status:") self.statuscombo.clear() self.statuscombo.setEnabled(False) if (len(datatype.categoryDict) > 1): self.categorycombo.clear() self.categorycombo.addItems(datatype.categoryDict.keys()) self.categorycombo.setEnabled(True) if datatype.categoryPost: self.categorylabel.setText("Category (POST):") else: self.categorylabel.setText("Category:") else: self.categorylabel.setText("Category:") self.categorycombo.clear() self.categorycombo.setEnabled(False) if (len(datatype.assignedToDict) > 1): self.assignedcombo.clear() self.assignedcombo.addItems(datatype.assignedToDict.keys()) self.assignedcombo.setEnabled(True) if datatype.assignedToPost: self.assignedlabel.setText("Assigned To (POST):") else: self.assignedlabel.setText("Assigned To:") else: self.assignedlabel.setText("Assigned To:") self.assignedcombo.clear() self.assignedcombo.setEnabled(False) self.endcal.setEnabled(datatype.allowDates) self.startcal.setEnabled(datatype.allowDates) self.startcombo.setEnabled(datatype.allowDates) self.endcombo.setEnabled(datatype.allowDates) def completed(self): self.statusUpdate('Ready') self.current_report.reset() if self.datecheck() or self.dframe is False: return if (self.tabs.currentIndex() == 0): self.mainwind = previewGui.preview( self.dframe, self.datacombo.currentText(), self.startcal.selectedDate().toPyDate(), self.endcal.selectedDate().toPyDate()) self.mainwind.show() self.dframe = False self.dataoptions.get(self.datacombo.currentText()).reset() self.current_report.reset() self.statusUpdate('Ready') def datecheck(self): return ((self.startcal.selectedDate().daysTo( self.endcal.selectedDate()) < 0) or (self.startrepcal.selectedDate().daysTo( self.endrepcal.selectedDate()) < 0))
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 ui_excute(object): def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.resize(511, 475) self.centralwidget = QWidget(MainWindow) self.centralwidget.setObjectName("centralwidget") self.envComboBox = QComboBox(self.centralwidget) self.envComboBox.setGeometry(QtCore.QRect(160, 30, 111, 21)) self.envComboBox.setObjectName("envComboBox") self.typeComboBox = QComboBox(self.centralwidget) self.typeComboBox.setGeometry(QtCore.QRect(160, 80, 111, 21)) self.typeComboBox.setObjectName("typeComboBox") self.label = QLabel(self.centralwidget) self.label.setGeometry(QtCore.QRect(40, 30, 91, 16)) self.label.setObjectName("label") self.label_2 = QLabel(self.centralwidget) self.label_2.setGeometry(QtCore.QRect(40, 80, 91, 16)) self.label_2.setObjectName("label_2") self.label_3 = QLabel(self.centralwidget) self.label_3.setGeometry(QtCore.QRect(40, 130, 91, 16)) self.label_3.setObjectName("label_3") self.pushButton = QPushButton(self.centralwidget) self.pushButton.setGeometry(QtCore.QRect(410, 365, 81, 41)) self.pushButton.setObjectName("pushButton") self.pushButton_1 = QPushButton(self.centralwidget) self.pushButton_1.setGeometry(QtCore.QRect(30, 365, 81, 41)) self.pushButton_1.setObjectName("checkPushButton") self.textBrowser = QTextBrowser(self.centralwidget) self.textBrowser.setGeometry(QtCore.QRect(160, 350, 240, 90)) self.textBrowser.setObjectName("textBrowser") self.calendarWidget = QCalendarWidget(self.centralwidget) self.calendarWidget.setGeometry(QtCore.QRect(160, 130, 271, 200)) self.calendarWidget.setGridVisible(True) self.calendarWidget.setHorizontalHeaderFormat( QCalendarWidget.ShortDayNames) self.calendarWidget.setVerticalHeaderFormat( QCalendarWidget.NoVerticalHeader) self.calendarWidget.setNavigationBarVisible(True) self.calendarWidget.setDateEditEnabled(True) self.calendarWidget.setObjectName("calendarWidget") MainWindow.setCentralWidget(self.centralwidget) self.statusbar = QStatusBar(MainWindow) self.statusbar.setObjectName("statusbar") MainWindow.setStatusBar(self.statusbar) self.retranslateUi(MainWindow) QtCore.QMetaObject.connectSlotsByName(MainWindow) for i in list_env: self.envComboBox.insertItem(list_env.index(i), i) for i in list_job_type: self.typeComboBox.insertItem(list_job_type.index(i), i) self.pushButton.clicked.connect(self.excutejob) self.pushButton_1.clicked.connect(self.checkScanJob) def retranslateUi(self, MainWindow): _translate = QtCore.QCoreApplication.translate MainWindow.setWindowTitle(_translate("MainWindow", "定时任务执行工具")) self.label.setText(_translate("MainWindow", "定时任务环境:")) self.label_2.setText(_translate("MainWindow", "定时任务类型:")) self.label_3.setText(_translate("MainWindow", "定时任务日期:")) self.pushButton.setText(_translate("MainWindow", "执行")) self.pushButton_1.setText(_translate("MainWindow", "服务扫描检查")) def checkScanJob(self): table = dic_env[self.envComboBox.currentText()]['tablename'] last_create_time = lastCreatTime(table) if ('beginTime' in globals()): if last_create_time > beginTime: QTextBrowser.append(self.textBrowser, "服务扫描任务已经执行完毕!") else: QTextBrowser.append(self.textBrowser, "服务扫描任务仍在执行,请稍后再检查!") else: QTextBrowser.append(self.textBrowser, "请先执行服务扫描任务") def excutejob(self): #获取参数 job_env = self.envComboBox.currentText() job_type = dic_job_type[self.typeComboBox.currentText()] job_name = self.typeComboBox.currentText() date = self.calendarWidget.selectedDate() job_date = date.toString(Qt.ISODate) ip = dic_env[job_env]['ip'] username = dic_env[job_env]['username'] password = dic_env[job_env]['password'] # 连接SSH try: ssh = paramiko.SSHClient() key = paramiko.AutoAddPolicy() ssh.set_missing_host_key_policy(key) ssh.connect(ip, 22, username, password, timeout=5) # 执行Job命令 job_command = 'export app_name="cs-expertsystem-job";app_job="cs-expertsystem-job-crontab";port=' + str( port ) + ';parameter=' + job_type + ';parameter2=' + job_date + ';PATH=/usr/java/jdk1.8.0_73/bin:$PATH;JAVA_HOME=/usr/java/jdk1.8.0_73;mkdir -p /yazuo_apps/logs/$app_name/;chmod a+x /yazuo_apps/$app_name/current/$app_name.jar;java -server -Xms512m -Xmx512m -XX:MaxPermSize=128m -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintClassHistogram -XX:+PrintTenuringDistribution -XX:+PrintGCApplicationStoppedTime -Xloggc:/yazuo_apps/logs/$app_name/gc_log -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=100 -XX:GCLogFileSize=10240K -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/yazuo_apps/logs/$app_name/heap_dump.hprof -Dfile.encoding=UTF-8 -Dapp_home=/yazuo_apps/$app_name/current -jar /yazuo_apps/$app_name/current/$app_name.jar $parameter $parameter2 --server.port=$port --spring.application.name=$app_name --logging.path=/yazuo_apps/logs/$app_name/ --logging.file=/yazuo_apps/logs/$app_name/info.log --task.name=$app_job --server.tomcat.accesslog.suffix=.log >/yazuo_apps/logs/$app_name/console.log 2>&1' stdin, stdout, stderr = ssh.exec_command(job_command) ssh.close() msg = job_name + '(' + job_date + ") 定时任务发送完毕!" QTextBrowser.setText(self.textBrowser, msg) except: QTextBrowser.setText(self.textBrowser, "执行失败!") # 获取日志文件 t = paramiko.Transport((ip, 22)) t.connect(username=username, password=password) sftp = paramiko.SFTPClient.from_transport(t) beginString = job_type + '任务开始时间' cmpleteString = job_type + '执行完毕时间' time.sleep(1) try: state = 0 time.sleep(5) for i in range(1, 120): time.sleep(5) sftp.get('/yazuo_apps/logs/cs-expertsystem-job/console.log', os.getcwd() + '/\\console.log') log_content = open('console.log', 'r', encoding='UTF-8') log_string = log_content.read() log_content.close() if state == 0: if beginString in log_string: state = 1 if job_type == 'ScanBizOpportunityJob': break if state == 1: if cmpleteString in log_string: state = 2 break if state == 0: QTextBrowser.append(self.textBrowser, "未检测到任务开始执行") if state == 1 and job_type == 'ScanBizOpportunityJob': mat = re.search(beginString + r'.{21}', log_string) global beginTime beginTime = datetime.datetime.strptime( mat.group(0)[-19:], '%Y-%m-%d %H:%M:%S') print(beginTime) QTextBrowser.append(self.textBrowser, "请点击 服务扫描查询 按钮来检查是否执行完毕") if state == 1 and job_type != 'ScanBizOpportunityJob': mat = re.search(beginString + r'.{21}', log_string) QTextBrowser.append( self.textBrowser, job_type + mat.group(0)[-27:] + " 但未检测到执行结束") if state == 2: mat = re.search(beginString + r'.{21}', log_string) mat1 = re.search(cmpleteString + r'.{21}', log_string) QTextBrowser.append(self.textBrowser, job_name + mat.group(0)[-27:]) QTextBrowser.append(self.textBrowser, job_name + mat1.group(0)[-27:]) except: QTextBrowser.append(self.textBrowser, "获取日志失败,可能未执行成功")