def UiComponents(self): # creating a QCalendarWidget object global calendar calendar = QCalendarWidget(self) # setting geometry to the calendar calendar.setGeometry(0, 0, 400, 250)
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 MainWindow(QMainWindow): def __init__(self): super().__init__() # 윈도우 설정 self.setGeometry(300, 100, 1200, 800) # x, y, w, h self.setWindowTitle('Canlendar Widget') # CalendarWidget 위젯 화면에 표시 self.cal = QCalendarWidget(self) self.cal.setGeometry(120, 50, 970, 300) self.cal.setGridVisible(True) self.cal.selectionChanged.connect(self.calendar_change) # min max 기간 설정 #self.cal.setMinimumDate(QDate(2020, 8, 25)) #self.cal.setMaximumDate(QDate(2020, 8, 27)) # Calendar 에서 선택한 값 표시할 QLabel self.calendar_label = QLabel(self) self.calendar_label.setGeometry(120, 370, 970, 30) self.calendar_label.setStyleSheet('background-color:#D3D3D3') self.b = QPlainTextEdit(self) self.b.insertPlainText("일기를 작성해요주세용.\n") self.b.setGeometry(120, 420, 970, 200) self.setupUI() def setupUI(self): btn1 = QPushButton("저장", self) btn2 = QPushButton("닫기", self) btn1.setGeometry(450, 650, 80, 30) btn1.clicked.connect(QCoreApplication.instance().quit) btn2.setGeometry(650, 650, 80, 30) btn2.clicked.connect(QCoreApplication.instance().quit) # Calendar Open 함수 @pyqtSlot() def calendar_change(self): cal_date = self.cal.selectedDate() strDate = cal_date.toString('\t\t\t\t\t\t\t\t' + 'yyyy년 ' + 'MM월 ' + 'dd일') # QDate 를 str self.calendar_label.setText(strDate) # 달력에서 현재를 선택 @pyqtSlot() def select_today(self): # self.cal.showToday() # self.cal.showNextMonth() #self.cal.setSelectedDate(QDate()) self.cal.currentPageChanged(self, 2022, 10)
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 CalendarDemo(QWidget): global currentYear, currentMonth, final_date currentMonth = datetime.now().month currentYear = datetime.now().year final_date = '{0}-{1}-{2}'.format(datetime.now().day, datetime.now().month, datetime.now().year) def __init__(self): super().__init__() self.setWindowTitle('Calendario') self.setGeometry(300, 300, 680, 460) self.initUI() def initUI(self): self.calendar = QCalendarWidget(self) self.calendar.setGeometry(20, 20, 630, 410) self.calendar.setGridVisible(True) self.button = QPushButton('Confirmar') self.calendar.layout().addWidget(self.button) self.calendar.setMinimumDate(QDate(currentYear - 10, currentMonth, 1)) self.calendar.setMaximumDate( QDate(currentYear, currentMonth + 1, calendar.monthrange(currentYear, currentMonth)[1])) self.calendar.setSelectedDate(QDate(currentYear, currentMonth, 1)) self.calendar.clicked.connect(self.printDateInfo) self.button.clicked.connect(self.on_button_clicked) def printDateInfo(self, qDate): self.final_date = '{0}-{1}-{2}'.format(qDate.day(), qDate.month(), qDate.year()) # print(self.final_date) # print(f'Day Number of the year: {qDate.dayOfYear()}') # print(f'Day Number of the week: {qDate.dayOfWeek()}') def on_button_clicked(self): # print(self.final_date) PullData.main(self.final_date) alert = QMessageBox() alert.setText('Baixando processos') alert.exec_()
class Ui_Dialog(object): def setupUi(self, Dialog): Dialog.setObjectName("Dialog") Dialog.resize(400, 300) self.calendarWidget = QCalendarWidget(Dialog) self.calendarWidget.setGeometry(QRect(50, 60, 312, 173)) self.calendarWidget.setObjectName("calendarWidget") self.OkButton = QPushButton(Dialog) self.OkButton.setGeometry(QRect(240, 240, 113, 32)) self.OkButton.setObjectName("OkButton") self.cancelButton = QPushButton(Dialog) self.cancelButton.setGeometry(QRect(120, 240, 113, 32)) self.cancelButton.setObjectName("cancelButton") self.label = QLabel(Dialog) self.label.setGeometry(QRect(30, 10, 331, 31)) self.label.setObjectName("label") def show_config(self, data): Echo.SendData("dir") i = 1 self.OkButton.clicked.connect(lambda checked, i=2: self.show_config(data))
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 Windows_4(QWidget): def __init__(self, req_News, settings_panel=None): super().__init__() self.news = req_News self.settings_panel=settings_panel self.composition() def composition(self): self.setWindowTitle('Central Bank News') self.setGeometry(10, 10, 270, 650) self.setWindowIcon(QIcon(self.settings_panel)) self.news_input() self.show() """Фу-ия news_input является конструктором для основных элементов окна экземпляров класса Windows_4 """ def news_input(self): self.lab_all = QLabel('All news:', self) self.lab_search = QLabel('Search:', self) self.lab_by_date = QLabel('News by date:', self) self.txt_all = QLineEdit(self) self.txt_search = QLineEdit(self) self.exit_but = QPushButton('Exit') self.find_but = QPushButton('Find') self.find_but2 = QPushButton('Find') self.cal_but= QPushButton('Calendar') self.cal_but.clicked.connect(self.calendar) self.find_but.clicked.connect(self.find_news) self.find_but2.clicked.connect(self.find_by_words) self.exit_but.clicked.connect(self.close) self.date = QDateEdit(self) self.date.setDisplayFormat('dd/MM/yyyy') self.scroll_area=QScrollArea()#Создаем обект с горизонтальной и вертикальной полосой прокрутки self.scroll_area.setWidgetResizable(True) self.scroll_area.setVerticalScrollBarPolicy(2)#Вертикальная и горизонтальная полоса прокрутки будут вседа видны self.scroll_area.setHorizontalScrollBarPolicy(2) grid = QGridLayout() grid.setSpacing(1) grid.addWidget(self.lab_all, 1, 0, 1, 1) grid.addWidget(self.txt_all, 1, 1, 1, 1) grid.addWidget(self.date, 2, 1, 1, 1) grid.addWidget(self.cal_but, 2, 2, 1, 1) grid.addWidget(self.find_but, 2, 3, 1, 1) grid.addWidget(self.lab_by_date, 2, 0, 1, 1) grid.addWidget(self.lab_search, 3, 0, 1, 1) grid.addWidget(self.txt_search, 3, 1, 1, 2) grid.addWidget(self.find_but2, 3, 3, 1, 1) grid.addWidget(self.scroll_area, 4, 0, 1, 6) grid.addWidget(self.exit_but, 5, 5, 1, 1) self.setLayout(grid) self.txt_all.setText(str(len(self.news.keys()))) def calendar(self): self.cal=QCalendarWidget() self.cal.setGridVisible(True) self.cal.setGeometry(300,300,450,200) self.cal.setWindowIcon(QIcon(self.settings_panel)) self.cal.setWindowTitle('Calendar') self.cal.show() self.cal.clicked[QDate].connect(self.show_date) def show_date(self): self.date.setDate(self.cal.selectedDate()) """Фу-ия find_news динамически создает объекты: поля вывода текста и кнопки для переноса на сайт ЦБ для просмотра новости, на основании полученных данных с сервера ЦБ РФ """ def find_news(self): if datetime(int(self.date.text()[6:]), int(self.date.text()[3:5]), int(self.date.text()[0:2]), hour=0, minute=0, second=0, microsecond=0, tzinfo=None) > datetime.now(): self.error_no_data = QErrorMessage(self) self.error_no_data.setWindowTitle('No data available') self.error_no_data.showMessage('You entered a date that is greater than the current date') else: self.grid_scroll = QGridLayout()#Создаем сетку внутри области прокрутки self.scroll_content = QWidget() self.scroll_content.setLayout(self.grid_scroll) self.scroll_area.setWidget(self.scroll_content) self.but_and_url = dict() count = 2 for item in self.news.keys(): if self.date.text().replace('/', '.') == str(self.news[item]['Date']): self.vallue = QTextEdit((str(self.news[item]['Title']))) self.button = QPushButton('Send') self.url = str(self.news[item]['Url']) self.button.clicked.connect(self.open_url) self.grid_scroll.addWidget(self.vallue, count, 0, 1, 1) count += 1 self.grid_scroll.addWidget(self.button, count, 0, 1, 1) count += 1 self.but_and_url[self.button] = self.url """Фу-ия open_url при нажтии на кнопку под новостью, переносит на сайт ЦБ для просмотра """ def open_url(self): sendler=self.sender() webbrowser.open_new('http://www.cbr.ru'+self.but_and_url[sendler]) """Фу-ия find_by_words позволяет осуществить поиск по полученным новостям, отобрать и отобразить те (также динамически создавая виджеты), которые нас интересуют """ def find_by_words(self): if self.txt_search.text()=='': self.error_no_data = QErrorMessage(self) self.error_no_data.setWindowTitle('Unsuccessful search') self.error_no_data.showMessage('You must enter a word') else: self.grid_scroll = QGridLayout() self.scroll_content = QWidget() self.scroll_content.setLayout(self.grid_scroll) self.scroll_area.setWidget(self.scroll_content) self.but_and_url = dict() count = 2 for item in self.news.keys(): if self.txt_search.text() in self.news[item]['Title']: self.vallue = QTextEdit((str(self.news[item]['Title']))) self.button = QPushButton('Send') self.url = str(self.news[item]['Url']) self.button.clicked.connect(self.open_url) self.grid_scroll.addWidget(self.vallue, count, 0, 1, 1) count += 1 self.grid_scroll.addWidget(self.button, count, 0, 1, 1) count += 1 self.but_and_url[self.button] = self.url if len(self.but_and_url.keys())==0: self.error_no_data = QErrorMessage(self) self.error_no_data.setWindowTitle('Unsuccessful search') self.error_no_data.showMessage('Nothing found on your request')
grid.addWidget(materiaLabel, 0, 0) # Pos. label grid.addWidget(materiaEntry, 0, 1) # Pos. Entry # VOTO votoLabel = QLabel(widget) votoLabel.setText("Voto:") votoEntry = QLineEdit() # input grid.addWidget(votoLabel, 1, 0) grid.addWidget(votoEntry, 1, 1) # DATA dataLabel = QLabel(widget) dataLabel.setText("Data:") calendar = QCalendarWidget(widget) calendar.setGridVisible = False calendar.setGeometry(10, 10, 10, 10) grid.addWidget(dataLabel, 2, 0) grid.addWidget(calendar, 2, 1) # BOTTONE AGGIUNTA VOTO votoButton = QPushButton(widget) votoButton.setText("Add") votoButton.clicked.connect(saveVoto) grid.addWidget(votoButton, 3, 0) # BOTTONE MEDIA mediaButton = QPushButton(widget) mediaButton.setText("Media") mediaButton.clicked.connect(getMedie) grid.addWidget(mediaButton, 3, 1)
class YuToolsDailyPlan(QWidget): def __init__(self): super().__init__() ActionDao.auto_update_action() self.txt_content = QPlainTextEdit(self) self.txt_content.setGeometry(10, 10, 350, 50) self.rb_begin = QRadioButton(self) self.rb_begin.setText('Begin') self.rb_begin.setChecked(True) self.rb_begin.setGeometry(10, 70, 50, 22) self.de_begin = QDateEdit(self) self.de_begin.setDate(QDate.currentDate()) self.de_begin.setGeometry(70, 70, 90, 22) self.rb_begin.clicked.connect( lambda: self.rb_select_date(self.de_begin)) self.rb_deadline = QRadioButton(self) self.rb_deadline.setText("Deadline") self.rb_deadline.setGeometry(180, 70, 60, 22) self.de_deadline = QDateEdit(self) self.de_deadline.setDate(QDate.currentDate().addDays(7)) self.de_deadline.setGeometry(250, 70, 90, 22) self.rb_deadline.clicked.connect( lambda: self.rb_select_date(self.de_deadline)) self.calendar_select = QCalendarWidget(self) self.calendar_select.setGeometry(10, 100, 256, 190) self.calendar_select.clicked.connect(self.select_date) self.combo_frequency = QComboBox(self) self.combo_frequency.addItem(PlanFrequency.NoRepeat.name) self.combo_frequency.addItem(PlanFrequency.Day.name) self.combo_frequency.addItem(PlanFrequency.Week.name) self.combo_frequency.addItem(PlanFrequency.Month.name) self.combo_frequency.addItem(PlanFrequency.Quarter.name) self.combo_frequency.addItem(PlanFrequency.Year.name) self.combo_frequency.setGeometry(280, 100, 80, 26) self.sb_repeat = QSpinBox(self) self.sb_repeat.setMinimum(1) self.sb_repeat.setGeometry(280, 130, 80, 26) self.cb_include = QCheckBox(self) self.cb_include.setText("Include Begin") self.cb_include.setChecked(True) self.cb_include.setGeometry(280, 160, 80, 26) self.combo_importance = QComboBox(self) self.combo_importance.addItem('Important') self.combo_importance.addItem('Unimportant') self.combo_importance.setGeometry(280, 190, 80, 26) self.combo_urgency = QComboBox(self) self.combo_urgency.addItem('Urgent') self.combo_urgency.addItem('Non-Urgent') self.combo_urgency.setGeometry(280, 220, 80, 26) self.btn_save = QPushButton(self) self.btn_save.setGeometry(280, 260, 80, 26) self.btn_save.setText("Save") self.btn_save.clicked.connect(self.save_plan) self.tb_plan = QTableView(self) self.tb_plan.horizontalHeader().setStretchLastSection(True) self.tb_plan.horizontalHeader().setSectionResizeMode( QHeaderView.Custom) self.tb_plan.verticalHeader().hide() self.tb_plan.setGeometry(370, 10, 421, 281) self.line_importance = QFrame(self) self.line_importance.setGeometry(390, 295, 20, 435) self.line_importance.setFrameShape(QFrame.VLine) self.line_importance.setFrameShadow(QFrame.Sunken) self.line_urgency = QFrame(self) self.line_urgency.setGeometry(5, 480, 791, 16) self.line_urgency.setFrameShape(QFrame.HLine) self.line_urgency.setFrameShadow(QFrame.Sunken) self.combo_ac_list_filter = QComboBox(self) self.combo_ac_list_filter.addItem('Wait') self.combo_ac_list_filter.addItem('Going') self.combo_ac_list_filter.addItem('Done') self.combo_ac_list_filter.addItem('Cancel') self.combo_ac_list_filter.addItem('Expire') self.combo_ac_list_filter.addItem('Will') self.combo_ac_list_filter.addItem('All') self.combo_ac_list_filter.setCurrentIndex(1) self.combo_ac_list_filter.setGeometry(375, 478, 50, 20) self.combo_ac_list_filter.currentIndexChanged.connect( self.change_tb_ac_list) self.tb_ac_first = QTableView(self) self.tb_ac_first.horizontalHeader().setStretchLastSection(True) self.tb_ac_first.horizontalHeader().setSectionResizeMode( QHeaderView.Custom) self.tb_ac_first.verticalHeader().hide() self.tb_ac_first.setItemDelegateForColumn( 3, ActionStatusDelegate(self.tb_ac_first)) self.tb_ac_first.setGeometry(410, 300, 381, 178) self.tb_ac_second = QTableView(self) self.tb_ac_second.horizontalHeader().setStretchLastSection(True) self.tb_ac_second.horizontalHeader().setSectionResizeMode( QHeaderView.Custom) self.tb_ac_second.verticalHeader().hide() self.tb_ac_second.setItemDelegateForColumn( 3, ActionStatusDelegate(self.tb_ac_second)) self.tb_ac_second.setGeometry(10, 300, 381, 178) self.tb_ac_third = QTableView(self) self.tb_ac_third.horizontalHeader().setStretchLastSection(True) self.tb_ac_third.horizontalHeader().setSectionResizeMode( QHeaderView.Custom) self.tb_ac_third.verticalHeader().hide() self.tb_ac_third.setItemDelegateForColumn( 3, ActionStatusDelegate(self.tb_ac_third)) self.tb_ac_third.setGeometry(10, 498, 381, 178) self.tb_ac_fourth = QTableView(self) self.tb_ac_fourth.horizontalHeader().setStretchLastSection(True) self.tb_ac_fourth.horizontalHeader().setSectionResizeMode( QHeaderView.Custom) self.tb_ac_fourth.verticalHeader().hide() self.tb_ac_fourth.setItemDelegateForColumn( 3, ActionStatusDelegate(self.tb_ac_fourth)) self.tb_ac_fourth.setGeometry(410, 498, 381, 178) self.tb_acs = { 1: self.tb_ac_first, 2: self.tb_ac_second, 3: self.tb_ac_third, 4: self.tb_ac_fourth } self.refresh_tb_plan() for index in range(1, 5): self.refresh_tb_action(index) def rb_select_date(self, de_target): self.calendar_select.setSelectedDate(de_target.date()) def select_date(self): date = self.calendar_select.selectedDate() if self.rb_begin.isChecked(): self.de_begin.setDate(date) elif self.rb_deadline.isChecked(): self.de_deadline.setDate(date) def save_plan(self): code, data = self.valid_check() if code == -1: QMessageBox.critical(self, 'Error', data) return code2, actions = self.generate_actions(data) if code2 == -1: QMessageBox.critical(self, 'Error', actions) return plan_id = PlanDao.add_plan(data) ActionDao.add_actions(actions, plan_id) self.txt_content.clear() self.refresh_tb_plan() self.refresh_tb_action(tb_index=code) def valid_check(self): content = self.txt_content.toPlainText().replace('\n', '.') if content.strip(' ').strip('.').strip(' ') == '': return -1, 'Content must be a normal string!' begin = self.de_begin.date() deadline = self.de_deadline.date() now = QDate.currentDate() diff_begin = now.daysTo(begin) diff_deadline = now.daysTo(deadline) if diff_begin < 0 or diff_deadline < 0 or diff_deadline < diff_begin: return -1, 'Deadline date must be farther than begin date and both of them must be farther than Now' begin_date = datetime.date(begin.year(), begin.month(), begin.day()) deadline = datetime.date(deadline.year(), deadline.month(), deadline.day()) frequency = self.combo_frequency.currentText() repeat = self.sb_repeat.value() importance = self.combo_importance.currentText() degree_importance = False if importance.lower().startswith( 'un') else True urgent = self.combo_urgency.currentText() degree_urgent = False if urgent.lower().startswith('non') else True plan = Plan(content=content, begin_date=begin_date, deadline=deadline, frequency=PlanFrequency[frequency], repeat=repeat, degree_importance=degree_importance, degree_urgency=degree_urgent) if degree_importance and degree_urgent: code = 1 elif degree_importance and not degree_urgent: code = 2 elif not degree_importance and not degree_urgent: code = 3 elif not degree_importance and degree_urgent: code = 4 return code, plan def generate_actions(self, plan): action_list = [] begin = QDate(plan.begin_date) deadline = QDate(plan.deadline) include = self.cb_include.isChecked() if plan.frequency == PlanFrequency.NoRepeat: days = begin.daysTo(deadline) if not include: if days == 0: return -1, 'There is not time to complete the plan' for i in range(plan.repeat): action = Action(content=plan.content, begin_date=plan.begin_date, deadline=plan.deadline, degree_importance=plan.degree_importance, degree_urgency=plan.degree_urgency, status=1) action_list.append(action) elif plan.frequency == PlanFrequency.Day: days = begin.daysTo(deadline) if not include: if days == 0: return -1, 'There is not time to complete the plan' for day in range(days + 1): if not include and day == 0: continue begin_date = begin.addDays(day) begin_date = datetime.date(begin_date.year(), begin_date.month(), begin_date.day()) for i in range(plan.repeat): action = Action(content=plan.content, begin_date=begin_date, deadline=begin_date, degree_importance=plan.degree_importance, degree_urgency=plan.degree_urgency, status=1) action_list.append(action) elif plan.frequency == PlanFrequency.Week: begin_week, begin_year = begin.weekNumber() begin_day_of_week = begin.dayOfWeek() deadline_week, deadline_year = deadline.weekNumber() weeks = deadline_week + (deadline_year - begin_year) * 52 - begin_week if not include: if weeks == 0: return -1, 'There is not time to complete the plan' current_week_deadline = begin.addDays(7 - begin_day_of_week) for week in range(weeks + 1): if not include and week == 0: continue current_week_deadline = current_week_deadline.addDays(7 * week) current_week_begin = current_week_deadline.addDays(-6) if week == 0: begin_date = plan.begin_date if week == weeks: deadline = plan.deadline else: deadline = datetime.date(current_week_deadline.year(), current_week_deadline.month(), current_week_deadline.day()) elif week == weeks: begin_date = datetime.date(current_week_begin.year(), current_week_begin.month(), current_week_begin.day()) deadline = plan.deadline else: begin_date = datetime.date(current_week_begin.year(), current_week_begin.month(), current_week_begin.day()) deadline = datetime.date(current_week_deadline.year(), current_week_deadline.month(), current_week_deadline.day()) for i in range(plan.repeat): action = Action(content=plan.content, begin_date=begin_date, deadline=deadline, degree_importance=plan.degree_importance, degree_urgency=plan.degree_urgency, status=1) action_list.append(action) elif plan.frequency == PlanFrequency.Month: begin_year = begin.year() deadline_year = deadline.year() years = deadline_year - begin_year begin_month = begin.month() deadline_month = deadline.month() months = deadline_month + 12 * years - begin_month if not include: if months == 0: return -1, 'There is not time to complete the plan' current_year = begin_year for month in range(months + 1): if not include and month == 0: continue current_month = begin_month + month if current_month > 12: current_month -= 12 current_year += 1 if month == 0: begin_date = plan.begin_date if month == months: deadline = plan.deadline else: deadline = datetime.date(current_year, current_month, begin.daysInMonth()) elif month == months: begin_date = datetime.date(current_year, current_month, 1) deadline = plan.deadline else: begin_date = datetime.date(current_year, current_month, 1) deadline = datetime.date(current_year, current_month, 1) deadline = datetime.date( current_year, current_month, QDate(deadline.year(), deadline.month(), deadline.day()).daysInMonth()) for i in range(plan.repeat): action = Action(content=plan.content, begin_date=begin_date, deadline=deadline, degree_importance=plan.degree_importance, degree_urgency=plan.degree_urgency, status=1) action_list.append(action) elif plan.frequency == PlanFrequency.Quarter: begin_year = begin.year() deadline_year = deadline.year() years = deadline_year - begin_year begin_month = begin.month() deadline_month = deadline.month() begin_quarter = (begin_month + 2) / 3 deadline_quarter = (deadline_month + 2) / 3 quarters = deadline_quarter + years * 4 - begin_quarter if not include: if quarters == 0: return -1, 'There is not time to complete the plan' current_year = begin_year for quarter in range(quarters + 1): if not include and quarter == 0: continue current_quarter = begin_quarter + quarter if current_quarter > 4: current_quarter -= 4 current_year += 1 begin_month = (current_quarter - 1) * 3 + 1 deadline_month = begin_month + 2 if quarter == 0: begin_date = plan.begin_date if quarter == quarters: deadline = plan.deadline else: deadline = datetime.date( current_year, deadline_month, (30 if deadline_month == 4 else 31)) elif quarter == quarters: begin_date = datetime.date(current_year, begin_month, 1) deadline = plan.deadline else: begin_date = datetime.date(current_year, begin_month, 1) deadline = datetime.date( current_year, deadline_month, (30 if deadline_month == 4 else 31)) for i in range(plan.repeat): action = Action(content=plan.content, begin_date=begin_date, deadline=deadline, degree_importance=plan.degree_importance, degree_urgency=plan.degree_urgency, status=1) action_list.append(action) elif plan.frequency == PlanFrequency.Year: begin_year = begin.year() deadline_year = deadline.year() years = deadline_year - begin_year if not include: if years == 0: return -1, 'There is not time to complete the plan' for year in range(years + 1): if not include and year == 0: continue current_year = begin_year + year if year == 0: begin_date = plan.begin_date if year == years: deadline = plan.deadline else: deadline = datetime.date(current_year, 12, 31) elif year == years: begin_date = datetime.date(current_year, 1, 1) deadline = plan.deadline else: begin_date = datetime.date(current_year, 1, 1) deadline = datetime.date(current_year, 12, 31) for i in range(plan.repeat): action = Action(content=plan.content, begin_date=begin_date, deadline=deadline, degree_importance=plan.degree_importance, degree_urgency=plan.degree_urgency, status=1) action_list.append(action) return 0, action_list def change_tb_ac_list(self): for index in range(1, 5): self.refresh_tb_action(index) def refresh_tb_plan(self): plans = PlanDao.query_plans() model = QStandardItemModel(len(plans), 3) model.setHorizontalHeaderLabels(['Content', 'Frequency', 'Flag']) row_index = 0 for plan in plans: qsi_content = QStandardItem(plan.content) qsi_content.setEditable(False) qsi_frequency = QStandardItem(plan.frequency.name) qsi_frequency.setEditable(False) qsi_flag = QStandardItem('{},{}'.format( 'Important' if plan.degree_importance else 'Unimportant', 'Urgency' if plan.degree_urgency else 'Non-urgency')) qsi_flag.setEditable(False) model.setItem(row_index, 0, qsi_content) model.setItem(row_index, 1, qsi_frequency) model.setItem(row_index, 2, qsi_flag) row_index += 1 self.tb_plan.setModel(model) self.tb_plan.setColumnWidth(0, 220) self.tb_plan.setColumnWidth(1, 70) self.tb_plan.setColumnWidth(2, 100) def refresh_tb_action(self, tb_index): tb_action = self.tb_acs[tb_index] ac_list_filter = self.combo_ac_list_filter.currentIndex() actions = ActionDao.query_actions(tb_index, ac_list_filter) model = QStandardItemModel(len(actions), 3) model.setHorizontalHeaderLabels( ['Content', 'Begin', 'Deadline', 'Status']) row_index = 0 for action in actions: qsi_content = QStandardItem(action.content) qsi_content.setEditable(False) qsi_begin_date = QStandardItem( action.begin_date.strftime("%Y/%m/%d")) qsi_content.setEditable(False) qsi_deadline = QStandardItem(action.deadline.strftime("%Y/%m/%d")) qsi_deadline.setEditable(False) qsi_status = QStandardItem() qsi_status.setData({'id': action.id, 'status': action.status}) qsi_status.setEditable(False) model.setItem(row_index, 0, qsi_content) model.setItem(row_index, 1, qsi_begin_date) model.setItem(row_index, 2, qsi_deadline) model.setItem(row_index, 3, qsi_status) row_index += 1 tb_action.setModel(model) tb_action.setColumnWidth(0, 150) tb_action.setColumnWidth(1, 75) tb_action.setColumnWidth(2, 75) tb_action.setColumnWidth(3, 40) def change_status(self, tb_action, act_id, status): if status == 0: QMessageBox.information(self, 'Tip', 'Please wait for beginning') elif status == 1: menu = QMenu(tb_action) done_act = menu.addAction(QIcon('icons/daily_plan/done.png'), 'Done') cancel_act = menu.addAction(QIcon('icons/daily_plan/cancel.png'), 'Cancel') act = menu.exec_( tb_action.mapToGlobal( QPoint(self.sender().x(), self.sender().y() + 10))) refresh = False if act == done_act: ActionDao.update_action(act_id, 2) refresh = True elif act == cancel_act: ActionDao.update_action(act_id, 3) refresh = True if refresh: self.refresh_tb_action( list(self.tb_acs.keys())[list( self.tb_acs.values()).index(tb_action)]) elif status == 2: QMessageBox.information( self, 'Tip', 'You are good that had completed the task') elif status == 3: QMessageBox.information(self, 'Tip', 'It is sadly you had canceled this task') elif status == 4: QMessageBox.information( self, 'Tip', 'It is sorry that this task had expired and you cannot operate it' )
#coding:utf-8 """ @info: @author:NetFj @software:PyCharm @file:qt54_calendarWidget.py @time:2018/11/19.8:12 """ import sys from PyQt5 import QtWidgets,QtCore from PyQt5.QtWidgets import QApplication,QCalendarWidget def calendar_selectionChanged(): data = calendar.selectedDate().toString("yyyy-MM-dd dddd") print(data) app = QApplication(sys.argv) calendar = QCalendarWidget() calendar.setGeometry(QtCore.QRect(0, 0, 400, 300)) calendar.selectionChanged.connect(calendar_selectionChanged) calendar.show() sys.exit(app.exec_())
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()
class PyAlarm(QMainWindow): LIBREELEC_URL = "http://libreelec" def __init__(self): super().__init__() self.__config = Config() self.initUI() def initUI(self): self.setWindowFlags(QtCore.Qt.FramelessWindowHint) self.setGeometry(0, 0, 800, 480) self.setWindowTitle("PyAlarm") self.setWindowIcon(QIcon("pyalarm.png")) self.mousePressEvent = self.__windowClicked self.background = QLabel(self) self.background.setGeometry(0, 0, 800, 480) self.background.setPixmap( QPixmap( "C:\\Users\\V-Modder\\projects\\pyalarm\\pyalarm\\pyalarm.png") ) self.time = QLabel(self) self.time.setGeometry(122, 50, 250, 50) self.time.setText("00:00") font = QFont("SansSerif", pointSize=45) font.setBold(True) self.time.setFont(font) self.time.setObjectName("time") self.time.setStyleSheet("QLabel#time {color: white}") self.calender = QCalendarWidget(self) self.calender.setGeometry(50, 130, 320, 250) self.calender.setEnabled(False) self.timer = QTimer() self.timer.timeout.connect(self.__timerTick) self.timer.start(1000) settings = QWebEngineSettings.globalSettings() settings.setAttribute(QWebEngineSettings.ShowScrollBars, False) settings.setAttribute(QWebEngineSettings.ErrorPageEnabled, False) self.browser = QWebEngineView(self) self.browser.load(QUrl(self.LIBREELEC_URL)) self.browser.setGeometry(410, 10, 380, 460) self.browser.loadFinished.connect(self.__browserLoadFinished) self.contextButton = StripedButton(self) self.contextButton.setGeometry(3, 3, 50, 50) self.contextButton.clicked.connect(self.__contextClicked) self.__contextMenu = ContextMenu(self) self.__contextMenu.show() self.__contextMenu.setVisible(False) self.__alarmWidget = AlarmWidget(self) self.__alarmWidget.show() self.__alarmWidget.setVisible(False) self.show() def __timerTick(self): currentDate = datetime.now() self.time.setText(currentDate.strftime("%H:%M")) self.calender.setSelectedDate(QDate()) alarmManager = AlarmManager(self.__config) holiday = HolidayCalendar(self.__config.getHolidayUser(), self.__config.getHolidayPassword) if alarmManager.alarmAvailable( currentDate) and not holiday.isHolidayToday(): self.__alarmWidget.activate() def __contextClicked(self): self.__contextMenu.activate(self.__config) def __windowClicked(self, event): self.__contextMenu.setVisible(False) def __browserLoadFinished(self, success): if success == False: time.sleep(1) self.browser.load(QUrl(self.LIBREELEC_URL))
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 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, "获取日志失败,可能未执行成功")
class Windows_1(QWidget): def __init__(self, settings_way_db, settings_panel=None): super().__init__() self.settings_way_db=settings_way_db self.settings_panel=settings_panel self.composition() def composition(self): self.setWindowTitle('Central Bank currency rates') self.setGeometry(10,10,350,150) self.setWindowIcon(QIcon(self.settings_panel)) self.date_input()#Конструируем основные компоненты окна self.show() """Фу-ия date_input является конструктором для основных элементов окна экземпляров класса Windows_1 """ def date_input(self): self.lab1=QLabel('Date:',self) self.send_but=QPushButton('Send') self.cal_but=QPushButton('Calendar') self.save_but=QPushButton('Save data') self.exit_but=QPushButton('Exit') self.save_but.clicked.connect(self.save_date)#При нажатии на кнопки, будет идти сигнал для вызова заданной функции self.send_but.clicked.connect(self.req_curr_rate) self.cal_but.clicked.connect(self.calendar) self.exit_but.clicked.connect(self.close) self.data=QDateEdit(self)#Создаем экземпляр класса виджета QDateEdit для окна ввода даты self.data.setDisplayFormat('dd/MM/yyyy') self.combo_val=QComboBox(self)#Создаем виджет выпадающего списка valutes=['AUD','AZN','GBP','AMD','BYN','BGN','BRL','HUF','HKD','DKK','USD','EUR','INR', 'KZT','CAD','KGS','CNY','MDL','NOK','PLN','RON','XDR','SGD','TJS','TRY','TMT', 'UZS','UAH','CZK','SEK','CHF','ZAR','KRW','JPY'] for valute in sorted(valutes): self.combo_val.addItem(valute) self.combo_val.activated[str].connect(self.insert_combo_val)#Закрепляем за каждым элементом списка сигнал для активации заданной функции grid=QGridLayout()#Создаем сетку для точного размещения элементов grid.setSpacing(1)#Расстояние между элементами в сетке grid.addWidget(self.lab1,1,0,1,1)#Добавляем эелементы с позиционированием grid.addWidget(self.data,1,1,1,1) grid.addWidget(self.cal_but, 1,2,1,1) grid.addWidget(self.send_but,1,3,1,1) grid.addWidget(self.combo_val, 3,0) options=('CharCode','Name','Nominal','NumCode','Value') count=4 self.options=dict()#Создаем словарь для размещения в нем ссылок на объеты экземпляров класса QTextEdit for option in options: val_lab=QLabel(option) val_edit=QLineEdit(self) grid.addWidget(val_lab,count,0) grid.addWidget(val_edit,count,1,1,8) self.options[option]=val_edit count+=1 grid.addWidget(self.save_but,12,7) grid.addWidget(self.exit_but,12,8) self.setLayout(grid)#Прикрепляем нашу сетку к экземпляру класса Windows_1 """Фу-ия req_curr_rate отправляет запрос базе данных ЦБ, полученные данные отображает в экземплярах класса QTextEdit, ссылки на объекты берет из словаря self.options """ def req_curr_rate(self): from cb_requests import req_curr_rate from requests import ConnectionError if datetime(int(self.data.text()[6:]), int(self.data.text()[3:5]), int(self.data.text()[0:2]), hour=0, minute=0, second=0, microsecond=0, tzinfo=None) > datetime.now():#Перед отправкой запроса идет сравнение времени, если введенная дата больше текущей, то выскочит сообщение об ошибке self.error_no_data = QErrorMessage(self) self.error_no_data.setWindowTitle('No data available') self.error_no_data.showMessage('You entered a date that is greater than the current date') else: try: self.request=req_curr_rate(self.data.text())#Обработка исключения, если при отправке запроса, появется ConnectionError, то появится окно с ошибкой for key in self.request: if key=='ValCurs': continue elif self.request[key]['CharCode']==self.combo_val.currentText(): for values in self.request.values(): for value in values: if value=='Date' or value=='name':continue else: self.options[value].setText(str(self.request[key][value])) except ConnectionError: self.error_no_connect = QErrorMessage(self) self.error_no_connect.setWindowTitle('Сonnection Error') self.error_no_connect.showMessage('No internet connection') """Фу-ия insert_combo_val получает сигнал от каждого элемента выпадающего списка и заполняет объекты словаря self.options полученными данными от запроса в ЦБ РФ """ def insert_combo_val(self, combo_val): try: for key in self.request: #Обработка исключения, в случае если запрос не был отправлен if key =='ValCurs': continue elif self.request[key]['CharCode']==combo_val: for values in self.request.values(): for value in values: if value=='Date' or value=='name':continue else: self.options[value].setText(str(self.request[key][value])) except AttributeError: self.error_no_data = QErrorMessage(self) self.error_no_data.setWindowTitle('No data available') self.error_no_data.showMessage('You did not send the request') """Фу-ия calendar, создает экземпляр класса QCalendarWidget """ def calendar(self): self.cal=QCalendarWidget() self.cal.setGridVisible(True)#Видимая сетка на календаре self.cal.setGeometry(300,300,450,200) self.cal.setWindowIcon(QIcon(self.settings_panel)) self.cal.setWindowTitle('Calendar') self.cal.show() self.cal.clicked[QDate].connect(self.show_date)#При нажатии на дату передает сигнал заданной функции """Фу-ия show_date устанавливает выбранную дату в поле вывода даты """ def show_date(self): self.data.setDate(self.cal.selectedDate()) """Фу-ия save_date сохраняет полученные данные из базы данных ЦБ РФ, в собственную базу данных 'Valute', при отсутсвии базы данных создает новую """ def save_date(self): from db_manag import DBmanager from sqlite3 import OperationalError as sqlite3_OperationalError self.data_base=DBmanager(self.settings_way_db,'valute')#Подключаемся или создаем экземпляр класса DBManager, передаем путь к базе данных из settings.yaml в качестве аргумента try: self.data_base.insert_into(self.request)#Сохранеям данные в базу данных 'Valute' except sqlite3_OperationalError: self.data_base.create_table()#Обработка исключения, в случае отсутсвия бд 'Valute', создаем новую базу данных self.data_base.insert_into(self.request) self.message_save_data = QMessageBox.information(self, 'Save Data', 'Data saved', QMessageBox.Ok) except AttributeError: self.error_no_data=QErrorMessage(self) self.error_no_data.setWindowTitle('No data') self.error_no_data.showMessage('No data to save') else: self.message_save_data=QMessageBox.information(self, 'Save Data', 'Data saved', QMessageBox.Ok)
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()
from PyQt5.QtWidgets import QCalendarWidget, QApplication from PyQt5.QtCore import QDate def myfunc(): dt = calendar.selectedDate() print(dt) app = QApplication.instance() if (app is None): app = QApplication([]) calendar = QCalendarWidget() calendar.setGridVisible(True) calendar.setGeometry(600, 400, 450, 350) calendar.setWindowTitle("日付選択") calendar.clicked[QDate].connect(myfunc) calendar.show() app.exec_()
class Calendar(QWidget): # keep the current time as class variable for reference currentDay = datetime.now().day currentMonth = datetime.now().month currentYear = datetime.now().year def __init__(self): super().__init__() folder = path.dirname(__file__) self.icon_folder = path.join(folder, "icons") self.setWindowTitle("Planner") self.setWindowIcon( QtGui.QIcon(path.join(self.icon_folder, 'window.png'))) self.setGeometry(300, 200, 600, 400) self.initUI() def initUI(self): self.calendar = QCalendarWidget() self.calendar.setGeometry(0, 0, 300, 300) self.calendar.setGridVisible(True) # don't allow going back to past months in calendar self.calendar.setMinimumDate( QDate(self.currentYear, self.currentMonth, 1)) # format for dates in calendar that have events self.fmt = QTextCharFormat() self.fmt.setBackground(QColor(255, 165, 0, 100)) # format for the current day cur_fmt = QTextCharFormat() cur_fmt.setBackground(QColor(0, 255, 90, 70)) # format to change back to if all events are deleted self.delfmt = QTextCharFormat() self.delfmt.setBackground(Qt.transparent) # check if json file exists, if it does load the data from it file_exists = path.isfile( path.join(path.dirname(__file__), "data.json")) if file_exists: with open("data.json", "r") as json_file: self.data = json.load(json_file) else: self.data = {} # delete data from days prior to the current day cur = QDate.currentDate() for date in list(self.data.keys()): check_date = QDate.fromString(date, "dMyyyy") if cur.daysTo(check_date) <= 0 and cur != check_date: self.data.pop(date) else: self.calendar.setDateTextFormat(check_date, self.fmt) # mark current day in calendar current = str(self.currentDay) + str(self.currentMonth) + str( self.currentYear) self.calendar.setDateTextFormat(QDate.fromString(current, "dMyyyy"), cur_fmt) # organize buttons and layouts for display addButton = QPushButton("Add Event") addButton.clicked.connect(self.addNote) editButton = QPushButton("Edit") editButton.clicked.connect(self.editNote) delButton = QPushButton("Delete") delButton.clicked.connect(self.delNote) self.calendar.selectionChanged.connect(self.showDateInfo) self.calendar.selectionChanged.connect(self.labelDate) self.calendar.selectionChanged.connect(self.highlightFirstItem) self.note_group = QListWidget() self.note_group.setSortingEnabled(True) self.note_group.setStyleSheet("QListView::item {height: 40px;}") self.label = QLabel() label_font = QtGui.QFont("Gabriola", 18) self.label.setFont(label_font) self.labelDate() self.showDateInfo() labelp = QLabel() pixmap = QPixmap(path.join(self.icon_folder, 'calendar.png')) labelp.setPixmap(pixmap) # set up a timer that automatically updates every second self.lcd = QLCDNumber() self.lcd.setSegmentStyle(QLCDNumber.Filled) self.lcd.setMinimumWidth(80) timer = QTimer(self) timer.timeout.connect(self.showTime) timer.start(1000) self.showTime() hbox1 = QHBoxLayout() hbox1.addStretch(1) hbox1.addWidget(self.label) hbox1.addStretch(1) hbox2 = QHBoxLayout() hbox2.addWidget(addButton) hbox2.addWidget(editButton) hbox2.addWidget(delButton) hbox3 = QHBoxLayout() hbox3.addStretch(1) hbox3.addWidget(labelp) hbox3.addWidget(self.lcd) vbox = QVBoxLayout() vbox.addLayout(hbox1) vbox.addWidget(self.note_group) vbox.addLayout(hbox2) vbox.addLayout(hbox3) hbox = QHBoxLayout() hbox.addWidget(self.calendar) hbox.addLayout(vbox) self.setLayout(hbox) def showDateInfo(self): # add events to selected date date = self.getDate() self.note_group.clear() if date in self.data: self.note_group.addItems(self.data[date]) def addNote(self): # adding notes for selected date # if a note starts with any number other than 0, 1, 2 # add a 0 before it so that we can easily sort events # by start time date = self.getDate() row = self.note_group.currentRow() title = "Add {}".format("event") string, ok = QInputDialog.getText(self, title, title) if ok and string: if string[0].isdigit() and string[0] not in ["0", "1", "2"]: string = string.replace(string[0], "0" + string[0]) self.note_group.insertItem(row, string) self.calendar.setDateTextFormat(QDate.fromString(date, "dMyyyy"), self.fmt) if date in self.data: self.data[date].append(string) else: self.data[date] = [string] def delNote(self): # delete the currently selected item date = self.getDate() row = self.note_group.currentRow() item = self.note_group.item(row) if not item: return reply = QMessageBox.question(self, "Remove", "Remove", QMessageBox.Yes | QMessageBox.No) if reply == QMessageBox.Yes: item = self.note_group.takeItem(row) self.data[date].remove(item.text()) if not self.data[date]: del (self.data[date]) self.calendar.setDateTextFormat( QDate.fromString(date, "dMyyyy"), self.delfmt) del (item) def editNote(self): # edit the currently selected item date = self.getDate() row = self.note_group.currentRow() item = self.note_group.item(row) if item: copy = item.text() title = "Edit event" string, ok = QInputDialog.getText(self, title, title, QLineEdit.Normal, item.text()) if ok and string: self.data[date].remove(copy) self.data[date].append(string) if string[0].isdigit() and string[0] not in ["0", "1", "2"]: string = string.replace(string[0], "0" + string[0]) item.setText(string) def getDate(self): # parse the selected date into usable string form select = self.calendar.selectedDate() date = str(select.day()) + str(select.month()) + str(select.year()) return date def labelDate(self): # label to show the long name form of the selected date # format US style like "Thursday, February 20, 2020" select = self.calendar.selectedDate() weekday, month = select.dayOfWeek(), select.month() day, year = str(select.day()), str(select.year()) week_day, word_month = QDate.longDayName(weekday), QDate.longMonthName( month) self.label.setText(week_day + ", " + word_month + " " + day + ", " + year) def highlightFirstItem(self): # highlight the first item immediately after switching selection if self.note_group.count() > 0: self.note_group.setCurrentRow(0) def showTime(self): # keep the current time updated time = QTime.currentTime() text = time.toString("hh:mm") if time.second() % 2 == 0: text.replace(text[2], '') self.lcd.display(text) def closeEvent(self, e): # save all data into json file when user closes app with open("data.json", "w") as json_file: json.dump(self.data, json_file) e.accept()
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()