Example #1
0
    def UiComponents(self):
        # creating a QCalendarWidget object
        global calendar
        calendar = QCalendarWidget(self)

        # setting geometry to the calendar
        calendar.setGeometry(0, 0, 400, 250)
Example #2
0
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_
Example #3
0
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
Example #5
0
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_()
Example #6
0
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))
Example #7
0
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()
Example #8
0
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')
Example #9
0
    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)
Example #10
0
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'
            )
Example #11
0
#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()
Example #13
0
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))
Example #14
0
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()
Example #15
0
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, "获取日志失败,可能未执行成功")
Example #16
0
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()
Example #18
0
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_()
Example #19
0
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()
Example #20
0
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()