コード例 #1
0
 def add_date_field(self,
                    f_title,
                    top,
                    left,
                    f_date,
                    widthchange=0,
                    need_calendar=True,
                    default_value=QDate(1980, 1, 1),
                    readonly=False,
                    label_margin=2,
                    label_font_size=LABEL_FONT_SIZE,
                    field_size=4):
     label = QLabel(self.parent)
     label.setText(f_title)
     font = QFont()
     font.setPointSize(label_font_size)
     label.setFont(font)
     geo_label = QRect(left * self.width_step, top,
                       label_margin * self.width_step, 30)
     label.setGeometry(geo_label)
     field = QDateEdit(self.parent)
     field.setCalendarPopup(need_calendar)
     geo_field = QRect((left + label_margin) * self.width_step, top,
                       field_size * self.width_step, 30)
     field.setGeometry(geo_field)
     if f_date:
         Defdate = QDate(int(f_date.split('.')[2]),
                         int(f_date.split('.')[1]),
                         int(f_date.split('.')[0]))
     else:
         Defdate = default_value
     field.setDate(Defdate)
     field.setReadOnly(readonly)
     return field
コード例 #2
0
class dateWidget(QWidget):
    def __init__(self, parent):
        super(dateWidget, self).__init__(parent=parent)
        self.start = 0
        self.end = 0
        # --------------------------------------------------------------------
        # Date picker
        self.label_from = QLabel('From', parent)
        self.label_from.setAlignment(Qt.AlignCenter)
        self.label_from.setFont(QFont("Open Sans Bold", 12))
        self.label_from.setStyleSheet("background-color: rgb(134,194,50);"
                                      "color: rgb(255,255,255);")
        self.label_from.resize(100, 20)
        self.label_from.move(20, 60)

        self.d1 = QDateEdit(parent, calendarPopup=True)
        self.d1.setDateTime(QDateTime.currentDateTime())
        self.d1.setStyleSheet("background-color: rgb(255, 255, 255);")
        self.d1.setGeometry(20, 80, 100, 25)
        #self.d1.dateChanged.connect(self.date_change)

        label_to = QLabel('To', parent)
        label_to.setAlignment(Qt.AlignCenter)
        label_to.setFont(QFont("Open Sans Bold", 12))
        label_to.setStyleSheet("background-color: rgb(134,194,50);"
                               "color: rgb(255,255,255);")
        label_to.resize(100, 20)
        label_to.move(140, 60)

        self.d2 = QDateEdit(parent, calendarPopup=True)
        self.d2.setDateTime(QDateTime.currentDateTime())
        self.d2.setStyleSheet("background-color: rgb(255, 255, 255);")
        self.d2.setGeometry(140, 80, 100, 25)

    def date_change(self):

        self.start = self.d1.dateTime().toString('yyyy-MM-dd')
        self.end = self.d2.dateTime().toString('yyyy-MM-dd')
コード例 #3
0
    def initUI(self):

        frame = QFrame()
        # frame.setStyleSheet("background-color: rgb(30, 45, 66);")
        frame.setFrameShape(QFrame.StyledPanel)
        frame.setFrameShadow(QFrame.Raised)
        # frame.setMinimumWidth(430)
        # frame.setFixedHeight(395)
        frame.setStyleSheet("border: none")

        add_employee_button = QLabel(frame)
        add_employee_button.setAlignment(Qt.AlignCenter)
        add_employee_button.setGeometry(QRect(110, 30, 210, 41))
        add_employee_button.setStyleSheet(
            "font: 75 12pt \"MS Shell Dlg 2\";\n"
            "background-color: rgb(30, 45, 66);\n"
            "color: rgb(255, 255, 255);")
        add_employee_button.setText("Add Product Details")

        namelabel = QLabel(frame)
        namelabel.setText("Name")
        namelabel.setGeometry(QRect(70, 100, 47, 13))

        nametextbox = QLineEdit(frame)
        nametextbox.setGeometry(QRect(160, 90, 181, 31))
        nametextbox.setFixedWidth(180)

        categorylabel = QLabel(frame)
        categorylabel.setText("Category")
        categorylabel.setGeometry(QRect(70, 140, 61, 16))

        categorytextbox = QComboBox(frame)
        categorytextbox.setGeometry(QRect(160, 130, 181, 31))
        categorytextbox.setFixedWidth(180)
        categorytextbox.addItems(["Pizza", "Burger"])

        quantitylabel = QLabel(frame)
        quantitylabel.setText("Quantity")
        quantitylabel.setGeometry(QRect(70, 180, 47, 13))

        quantitytextbox = QLineEdit(frame)
        quantitytextbox.setGeometry(QRect(160, 170, 181, 31))
        quantitytextbox.setFixedWidth(180)

        pricelabel = QLabel(frame)
        pricelabel.setText("Price")
        pricelabel.setGeometry(QRect(70, 220, 47, 13))

        pricetextbox = QLineEdit(frame)
        pricetextbox.setGeometry(QRect(160, 210, 181, 31))
        pricetextbox.setFixedWidth(180)

        sellingpricelabel = QLabel(frame)
        sellingpricelabel.setText("Selling Price")
        sellingpricelabel.setGeometry(QRect(70, 260, 90, 16))

        sellingpricetextbox = QDateEdit(frame)
        sellingpricetextbox.setGeometry(QRect(160, 250, 181, 31))
        sellingpricetextbox.setFixedWidth(180)
        sellingpricetextbox.setDate(QDate.currentDate())
        sellingpricetextbox.setMinimumDate(QDate.currentDate())

        addbutton = QPushButton(frame)
        addbutton.setText("Add Product")
        addbutton.setGeometry(QRect(160, 300, 111, 31))
        addbutton.setStyleSheet("font: 75 12pt \"MS Shell Dlg 2\";\n"
                                "background-color: rgb(30, 45, 66);\n"
                                "color: rgb(255, 255, 255);")

        layout = QVBoxLayout()
        layout.setContentsMargins(0, 0, 0, 0)
        layout.addWidget(frame)

        self.setLayout(layout)

        self.setWindowTitle("Add Employee Details")
        self.resize(430, 395)
        self.show()

        self.center()
コード例 #4
0
class AddBookingDetails(QMainWindow):

    closing = pyqtSignal(int)

    def __init__(self, parent, update, id=None):
        super().__init__(parent)

        self.db = DB()

        self.initUI(update, id)

    def initUI(self, update, id):

        self.setWindowModality(Qt.ApplicationModal)

        frame = QFrame()
        # frame.setStyleSheet("background-color: rgb(30, 45, 66);")
        frame.setFrameShape(QFrame.StyledPanel)
        frame.setFrameShadow(QFrame.Raised)
        # frame.setMinimumWidth(430)
        # frame.setFixedHeight(395)
        # frame.setStyleSheet("border: none")

        add_booking_button = QLabel(frame)
        add_booking_button.setAlignment(Qt.AlignCenter)
        add_booking_button.setGeometry(QRect(110, 30, 210, 41))
        add_booking_button.setStyleSheet("font: 75 12pt \"MS Shell Dlg 2\";\n"
                                         "background-color: rgb(30, 45, 66);\n"
                                         "color: rgb(255, 255, 255);")
        add_booking_button.setText("Add Reservation Details")

        # tablelabel = QLabel(frame)
        # tablelabel.setText("Table")
        # tablelabel.setGeometry(QRect(50, 120, 81, 20))
        #
        # tabletextbox = QComboBox(frame)
        # tabletextbox.setGeometry(QRect(170, 110, 181, 31))
        # tabletextbox.setFixedWidth(180)
        # tabletextbox.addItems(["Table 1", "Table 2"])

        customernamelabel = QLabel(frame)
        customernamelabel.setText("Customer Name")
        customernamelabel.setGeometry(QRect(50, 120, 100, 20))

        self.customernametextbox = QLineEdit(frame)
        self.customernametextbox.setGeometry(QRect(170, 110, 181, 31))
        self.customernametextbox.setFixedWidth(180)

        customercontactlabel = QLabel(frame)
        customercontactlabel.setText("Customer Contact")
        customercontactlabel.setGeometry(QRect(50, 160, 145, 19))

        self.customercontacttextbox = QLineEdit(frame)
        self.customercontacttextbox.setGeometry(QRect(170, 150, 181, 31))
        self.customercontacttextbox.setFixedWidth(180)

        datelabel = QLabel(frame)
        datelabel.setText("Date")
        datelabel.setGeometry(QRect(50, 200, 145, 19))

        self.datetextbox = QDateEdit(frame)
        self.datetextbox.setGeometry(QRect(170, 190, 181, 31))
        self.datetextbox.setFixedWidth(180)
        self.datetextbox.setDate(QDate.currentDate())
        self.datetextbox.setMinimumDate(QDate.currentDate())
        self.datetextbox.setDisplayFormat("dd-MM-yyyy")

        starttimelabel = QLabel(frame)
        starttimelabel.setText("Start Time")
        starttimelabel.setGeometry(QRect(50, 240, 121, 16))

        self.starttimetextbox = QTimeEdit(frame)
        self.starttimetextbox.setGeometry(QRect(170, 230, 181, 31))
        self.starttimetextbox.setFixedWidth(180)
        # self.starttimetextbox.setTime(QDate.currentDate())
        # self.starttimetextbox.setMinimumDate(QDate.currentDate())

        self.addbutton = QPushButton(frame)
        self.addbutton.setText("Add Booking")
        self.addbutton.setGeometry(QRect(160, 300, 151, 31))
        self.addbutton.setStyleSheet("font: 75 12pt \"MS Shell Dlg 2\";\n"
                                     "background-color: rgb(30, 45, 66);\n"
                                     "color: rgb(255, 255, 255);")
        # self.addbutton.clicked.connect(lambda: self.add_button_click("reservations"))

        if update == 'add':
            print("Add")
            print(id)
            self.addbutton.setText("Add Reservation")
            self.addbutton.clicked.connect(
                lambda: self.add_button_click("reservations"))
        else:
            print("Update")
            print(id)
            self.addbutton.setText("Update Reservation")
            self.addbutton.clicked.connect(
                lambda: self.update_button_click("reservations", id))

        layout = QVBoxLayout()
        layout.setContentsMargins(0, 0, 0, 0)
        layout.addWidget(frame)

        centralWidget = QWidget()
        centralWidget.setLayout(layout)

        self.setCentralWidget(centralWidget)

        # self.setLayout(layout)

        self.setWindowTitle("Add Reservation Details")
        self.resize(430, 395)
        self.show()

        self.center()

    def center(self):
        '''centers the window on the screen'''
        screen = QDesktopWidget().screenGeometry()
        size = self.geometry()
        self.move((screen.width() - size.width()) / 2,
                  (screen.height() - size.height()) / 2)

    def update_button_click(self, where, id):
        if where == "reservations":
            print("Tables Finally here")

            customer_name = self.customernametextbox.text()
            customer_contact = self.customercontacttextbox.text()
            start_time = self.starttimetextbox.text()

            try:
                date = datetime.datetime.strptime(self.datetextbox.text(),
                                                  "%d-%m-%Y")
                booking_date = datetime.datetime.strftime(date, "%Y-%m-%d")
            except Exception as e:
                ''' Make sure to add an error message. '''
                print(e)
                return

            if customer_name != "" and customer_contact != "":

                query = "update customerBooking set `customer_name`=%s, " \
                        "`phone_number`=%s, `booking_date`=concat(%s, ' ', %s)" \
                        "where id=%s;"
                values = (customer_name, customer_contact, booking_date,
                          start_time, id)

                result = self.db.execute(query, values)

                self.closeEvent = self.message()

    def add_button_click(self, where):
        if where == "reservations":
            print("Finally here")

            customer_name = self.customernametextbox.text()
            customer_contact = self.customercontacttextbox.text()
            start_time = self.starttimetextbox.text()

            try:
                date = datetime.datetime.strptime(self.datetextbox.text(),
                                                  "%d-%m-%Y")
                booking_date = datetime.datetime.strftime(date, "%Y-%m-%d")
            except Exception as e:
                ''' Make sure to add an error message. '''
                print(e)
                return

            if customer_name != "" and customer_contact != "":

                print("Got Here")

                query = "insert into customerBooking (`customer_name`, `phone_number`, `booking_date`)" \
                        "values (%s, %s, concat(%s, ' ', %s));"
                values = (customer_name, customer_contact, booking_date,
                          start_time)

                result = self.db.execute(query, values)

                self.closeEvent = self.message()

    def message(self):
        self.closing.emit(1)
        self.close()
コード例 #5
0
class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        self.centralwidget = QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.textSuffix = QTextEdit(self.centralwidget)
        self.textSuffix.setGeometry(QRect(20, 230, 261, 31))
        self.textSuffix.setObjectName("textSuffix")
        self.textRiskf = QTextEdit(self.centralwidget)
        self.textRiskf.setGeometry(QRect(20, 360, 261, 31))
        self.textRiskf.setObjectName("textRiskf")
        self.label = QLabel(self.centralwidget)
        self.label.setGeometry(QRect(20, 330, 261, 20))
        self.label.setObjectName("label")
        self.label_2 = QLabel(self.centralwidget)
        self.label_2.setGeometry(QRect(20, 270, 281, 21))
        self.label_2.setObjectName("label_2")
        self.label_3 = QLabel(self.centralwidget)
        self.label_3.setGeometry(QRect(20, 200, 261, 16))
        self.label_3.setObjectName("label_3")
        self.label_4 = QLabel(self.centralwidget)
        self.label_4.setGeometry(QRect(20, 130, 261, 21))
        self.label_4.setObjectName("label_4")
        self.label_5 = QLabel(self.centralwidget)
        self.label_5.setGeometry(QRect(20, 60, 261, 21))
        self.label_5.setObjectName("label_5")
        self.startButton = QPushButton(self.centralwidget)
        self.startButton.setGeometry(QRect(20, 510, 111, 31))
        self.startButton.setObjectName("startButton")
        self.label_6 = QLabel(self.centralwidget)
        self.label_6.setGeometry(QRect(20, 10, 261, 41))
        font = QFont()
        font.setFamily("Times New Roman")
        font.setPointSize(12)
        font.setBold(True)
        font.setUnderline(True)
        font.setWeight(75)
        self.label_6.setFont(font)
        self.label_6.setObjectName("label_6")
        self.resultBrowser = QTextBrowser(self.centralwidget)
        self.resultBrowser.setGeometry(QRect(310, 30, 461, 501))
        self.resultBrowser.setObjectName("resultBrowser")
        self.DateStart = QDateEdit(self.centralwidget)
        self.DateStart.setGeometry(QRect(20, 90, 121, 31))
        self.DateStart.setMaximumDate(QDate(2050, 12, 31))
        self.DateStart.setMinimumDate(QDate(1990, 12, 31))
        self.DateStart.setDate(QDate(2018, 1, 1))
        self.DateStart.setObjectName("DateStart")
        self.DateEnd = QDateEdit(self.centralwidget)
        self.DateEnd.setGeometry(QRect(19, 163, 121, 31))
        self.DateEnd.setDateTime(QDateTime(QDate(2018, 1, 1), QTime(0, 0, 0)))
        self.DateEnd.setMaximumDateTime(QDateTime(QDate(2050, 12, 31), QTime(23, 59, 59)))
        self.DateEnd.setMinimumDate(QDate(1990, 12, 31))
        self.DateEnd.setObjectName("DateEnd")
        self.spinBoxMode = QSpinBox(self.centralwidget)
        self.spinBoxMode.setGeometry(QRect(20, 290, 71, 31))
        self.spinBoxMode.setMinimum(1)
        self.spinBoxMode.setMaximum(3)
        self.spinBoxMode.setObjectName("spinBoxMode")
        self.label_7 = QLabel(self.centralwidget)
        self.label_7.setGeometry(QRect(170, 300, 101, 21))
        self.label_7.setObjectName("label_7")
        self.endButton = QPushButton(self.centralwidget)
        self.endButton.setGeometry(QRect(160, 510, 121, 31))
        self.endButton.setObjectName("endButton")
        self.fileButton = QPushButton(self.centralwidget)
        self.fileButton.setGeometry(QRect(20, 410, 261, 31))
        self.fileButton.setObjectName("fileButton")
        self.pathBrowser = QTextBrowser(self.centralwidget)
        self.pathBrowser.setGeometry(QRect(20, 450, 261, 41))
        self.pathBrowser.setObjectName("pathBrowser")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QMenuBar(MainWindow)
        self.menubar.setGeometry(QRect(0, 0, 800, 23))
        self.menubar.setObjectName("menubar")
        self.menuAnalysis = QMenu(self.menubar)
        self.menuAnalysis.setObjectName("menuAnalysis")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)
        self.menubar.addAction(self.menuAnalysis.menuAction())

        self.retranslateUi(MainWindow)
        QMetaObject.connectSlotsByName(MainWindow)
        ####################################################

        self.mythread = MyThread()
        self.mainthread = MyMainThread()

        self.fileButton.clicked.connect(lambda : self.file_path())
        self.mythread.trigger.connect(self.update_text)
        self.mainthread.result.connect(self.update_result)

        self.startButton.clicked.connect(lambda : self.input_Parameters())
        self.startButton.clicked.connect(lambda : self.mainthread.start())
        self.startButton.clicked.connect(lambda : self.mythread.start())
        self.endButton.clicked.connect(lambda : self.end_calculation())

        
    def input_Parameters(self):
        self.aa = str(self.DateStart.date().toString("yyyyMMdd"))
        self.bb = str(self.DateEnd.date().toString("yyyyMMdd"))
        self.cc = str(self.textSuffix.toPlainText())
        self.dd = int(self.spinBoxMode.value())
        self.ee = float(self.textRiskf.toPlainText())

        if self.dd==1:
            self.dx='p1f1'
        elif self.dd==2:
            self.dx='p0f1'
        elif self.dd==3:
            self.dx='p1f0'
        else:
            raise Exception('Running Mode is wrong')

        self.mainthread.parameters_in = [self.aa ,self.bb, self.cc, self.dx, self.ee, self.directory1]


    def file_path(self):  
        self.directory1 = QFileDialog.getExistingDirectory(self.centralwidget,"Please choose folder","/")+'/'
        self.pathBrowser.append(str(self.directory1))

    def update_text(self, message):
        self.resultBrowser.append(str(message))
    
    def update_result(self,message):
        self.mythread.stop_()
        sleep(1)
        self.resultBrowser.append(str(message))
        print(self.mainthread.str_result)
        for i in self.mainthread.str_result:
            print(i)
            self.resultBrowser.append(i)

    def end_calculation(self):
        self.mythread.stop_()
        self.mainthread.stop_()
        sleep(1)
        self.resultBrowser.append('\nCalculation terminated by user...')


    def retranslateUi(self, MainWindow):
        _translate = QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.label.setText(_translate("MainWindow", "Please input risk free rate(0.035)"))
        self.label_2.setText(_translate("MainWindow", "Choose a running mode(e.g (1)p1f1/(2)p0f1"))
        self.label_3.setText(_translate("MainWindow", "Please input the suffix for result file"))
        self.label_4.setText(_translate("MainWindow", "Please input earliest date(e.g 2018-01-01)"))
        self.label_5.setText(_translate("MainWindow", "Please input latest date(e.g 2018-12-30)"))
        self.startButton.setText(_translate("MainWindow", "Start Analysis"))
        self.label_6.setText(_translate("MainWindow", "Barra Contribution Analysis(v_test)"))
        self.label_7.setText(_translate("MainWindow", " (3)p1f0"))
        self.endButton.setText(_translate("MainWindow", "End Process"))
        self.fileButton.setText(_translate("MainWindow", "Choose a folder"))
        self.menuAnalysis.setTitle(_translate("MainWindow", "Analysis"))
コード例 #6
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'
            )
コード例 #7
0
class WidgetGallery(QDialog):

    def __init__(self, parent=None, submit_icon=None):
        super(WidgetGallery, self).__init__(parent)

        appctx = ApplicationContext()

        spreadsheet_hdl = SpreadsheetHandler()
        categories = spreadsheet_hdl.read_categories()

        self.tabsWidget = QTabWidget()

        # Add 'Expenses' tab to main widget
        self.createExpensesLayout()
        self.tabsWidget.addTab(self.expensesWidget,
                               QIcon(appctx.get_resource("submit.ico")),
                               "Expenses")

        # Add 'Incomes' tab to main widget
        self.createIncomesLayout()
        self.tabsWidget.addTab(self.incomesWidget,
                               QIcon(appctx.get_resource("submit.ico")),
                               "Incomes")

        # Add 'Latest Uploads' tab to main widget
        self.createLatestUploads()
        self.tabsWidget.addTab(self.latestUploadsWidget,
                               QIcon(appctx.get_resource("sheets.ico")),
                               "Latest Uploads")

        # Add 'Spreadsheet Actions' tab to main widget
        self.createSpreadsheetActionsLayout()
        self.tabsWidget.addTab(self.spreadsheetActionsWidget,
                               QIcon(appctx.get_resource("sheets.ico")),
                               "Spreadsheet Actions")

        # Set the current available expenses categories
        self.addCategories(categories)

        # Set main window size
        self.resize(570, 320)

        self.tabsWidget.currentChanged.connect(self.adjustTabWidgetSize)

        self.layout = QVBoxLayout()
        self.layout.addWidget(self.tabsWidget)
        self.setLayout(self.layout)
        self.setWindowTitle("Expenses Tracker")

        QApplication.setStyle(QStyleFactory.create("Fusion"))

    def createExpensesLayout(self):
        self.expensesWidget = QWidget()
        self.expensesWidget.setGeometry(QRect(10, 10, 550, 300))
        self.expensesWidget.size = (570, 320)

        expenseDoubleSpinBox_label = QLabel("Value", self.expensesWidget)
        expenseDoubleSpinBox_label.setGeometry(QRect(30, 80, 40, 20))
        expenseDoubleSpinBox_label.setAlignment(Qt.AlignBottom | Qt.AlignHCenter)
        self.expenseDoubleSpinBox = QDoubleSpinBox(self.expensesWidget)
        self.expenseDoubleSpinBox.setMaximum(10000)
        self.expenseDoubleSpinBox.setDecimals(2)
        self.expenseDoubleSpinBox.setMinimum(0)
        self.expenseDoubleSpinBox.setGeometry(QRect(10, 100, 80, 20))

        expenseDateEdit_label = QLabel("Date", self.expensesWidget)
        expenseDateEdit_label.setGeometry(QRect(120, 80, 40, 20))
        expenseDateEdit_label.setAlignment(Qt.AlignBottom | Qt.AlignHCenter)
        self.expenseDateEdit = QDateEdit(self.expensesWidget)
        self.expenseDateEdit.setCalendarPopup(True)
        self.expenseDateEdit.setDisplayFormat("dd/MM/yy")
        self.expenseDateEdit.setDate(QDate.currentDate())
        self.expenseDateEdit.setGeometry(QRect(100, 100, 80, 20))

        expenseCategoriesComboBox_label = QLabel("Category", self.expensesWidget)
        expenseCategoriesComboBox_label.setGeometry(QRect(210, 80, 60, 20))
        expenseCategoriesComboBox_label.setAlignment(Qt.AlignBottom | Qt.AlignHCenter)
        self.expenseCategoriesComboBox = QComboBox(self.expensesWidget)
        self.expenseCategoriesComboBox.setGeometry(QRect(190, 100, 100, 20))

        expenseSpecificationLine_label = QLabel("Specification", self.expensesWidget)
        expenseSpecificationLine_label.setGeometry(QRect(320, 80, 70, 20))
        expenseSpecificationLine_label.setAlignment(Qt.AlignBottom | Qt.AlignHCenter)
        self.expenseSpecificationLine = QLineEdit(self.expensesWidget)
        self.expenseSpecificationLine.setGeometry(QRect(300, 100, 115, 20))

        expenseObservationLine_label = QLabel("Observation", self.expensesWidget)
        expenseObservationLine_label.setGeometry(QRect(440, 80, 80, 20))
        expenseObservationLine_label.setAlignment(Qt.AlignBottom | Qt.AlignHCenter)
        self.expenseObservationLine = QLineEdit(self.expensesWidget)
        self.expenseObservationLine.setGeometry(QRect(420, 100, 115, 20))

        self.nonRecurringExpenseBox = QCheckBox("Non-recurring expense", self.expensesWidget)
        self.nonRecurringExpenseBox.setGeometry(QRect(10, 140, 130, 20))

        submitbutton = QPushButton("Submit Expense", self.expensesWidget)
        submitbutton.clicked.connect(self.submitExpenseButtonClicked)
        submitbutton.setGeometry(QRect(10, 170, 520, 25))

    def createLatestUploads(self):
        self.latestUploadsWidget = QWidget()
        self.latestUploadsWidget.setGeometry(QRect(10, 10, 550, 300))
        self.latestUploadsWidget.size = (824, 403)

        # Construct Latest Expenses Group
        expenses_group = QGroupBox("Latest Expenses", self.latestUploadsWidget)

        self.expensesTable = QTableWidget(expenses_group)
        self.expensesTable.setColumnCount(4)
        self.expensesTable.verticalHeader().setVisible(False)
        self.expensesTable.setEditTriggers(QAbstractItemView.NoEditTriggers)
        self.expensesTable.setSelectionMode(QAbstractItemView.NoSelection)
        self.expensesTable.setFixedSize(415, 265)
        self.expensesTable.setHorizontalHeaderLabels(["Date", "Value",
                                                      "Category", "Specification"])

        self.fillExpensesTableData()

        update_expenses_table_button = QPushButton("Update Expenses Table")
        update_expenses_table_button.clicked.connect(self.updateExpensesTableButtonClicked)

        layout = QVBoxLayout()
        layout.addWidget(self.expensesTable)
        layout.addWidget(update_expenses_table_button)

        expenses_group.setLayout(layout)
        expenses_group.move(10, 5)
        expenses_group.setStyleSheet("QGroupBox { font-weight: bold; } ")

        # Construct Latest Incomes Group
        incomes_group = QGroupBox("Latest Incomes", self.latestUploadsWidget)

        self.incomesTable = QTableWidget(incomes_group)
        self.incomesTable.setColumnCount(3)
        self.incomesTable.verticalHeader().setVisible(False)
        self.incomesTable.setEditTriggers(QAbstractItemView.NoEditTriggers)
        self.incomesTable.setSelectionMode(QAbstractItemView.NoSelection)
        self.incomesTable.setFixedSize(301, 265)
        self.incomesTable.setHorizontalHeaderLabels(["Date", "Value",
                                                     "Category"])

        self.fillIncomesTableData()

        update_incomes_table_button = QPushButton("Update Incomes Table")
        update_incomes_table_button.clicked.connect(self.updateIncomesTableButtonClicked)

        layout = QVBoxLayout()
        layout.addWidget(self.incomesTable)
        layout.addWidget(update_incomes_table_button)

        incomes_group.setLayout(layout)
        incomes_group.move(460, 5)
        incomes_group.setStyleSheet("QGroupBox { font-weight: bold; } ")

    def createIncomesLayout(self):
        self.incomesWidget = QWidget()
        self.incomesWidget.setGeometry(QRect(10, 10, 460, 300))
        self.incomesWidget.size = (480, 320)

        incomesDoubleSpinBox_label = QLabel("Value", self.incomesWidget)
        incomesDoubleSpinBox_label.setAlignment(Qt.AlignBottom | Qt.AlignHCenter)
        incomesDoubleSpinBox_label.setGeometry(QRect(40, 80, 40, 20))
        self.incomesDoubleSpinBox = QDoubleSpinBox(self.incomesWidget)
        self.incomesDoubleSpinBox.setMaximum(10000)
        self.incomesDoubleSpinBox.setDecimals(2)
        self.incomesDoubleSpinBox.setMinimum(0)
        self.incomesDoubleSpinBox.setGeometry(QRect(20, 100, 80, 20))

        incomesDateEdit_label = QLabel("Date", self.incomesWidget)
        incomesDateEdit_label.setAlignment(Qt.AlignBottom | Qt.AlignHCenter)
        incomesDateEdit_label.setGeometry(QRect(130, 80, 40, 20))
        self.incomesDateEdit = QDateEdit(self.incomesWidget)
        self.incomesDateEdit.setCalendarPopup(True)
        self.incomesDateEdit.setDisplayFormat("dd/MM/yy")
        self.incomesDateEdit.setDate(QDate.currentDate())
        self.incomesDateEdit.setGeometry(QRect(110, 100, 80, 20))

        incomesSpecificationLine_label = QLabel("Specification", self.incomesWidget)
        incomesSpecificationLine_label.setAlignment(Qt.AlignBottom | Qt.AlignHCenter)
        incomesSpecificationLine_label.setGeometry(QRect(220, 80, 70, 20))
        self.incomesSpecificationLine = QLineEdit(self.incomesWidget)
        self.incomesSpecificationLine.setGeometry(QRect(200, 100, 115, 20))

        incomesObservationLine_label = QLabel("Observation", self.incomesWidget)
        incomesObservationLine_label.setAlignment(Qt.AlignBottom | Qt.AlignHCenter)
        incomesObservationLine_label.setGeometry(QRect(340, 80, 80, 20))
        self.incomesObservationLine = QLineEdit(self.incomesWidget)
        self.incomesObservationLine.setGeometry(QRect(320, 100, 115, 20))

        submitbutton = QPushButton("Submit Income", self.incomesWidget)
        submitbutton.setGeometry(QRect(10, 170, 430, 25))
        submitbutton.clicked.connect(self.submitIncomeButtonClicked)

    def createSpreadsheetActionsLayout(self):
        self.spreadsheetActionsWidget = QWidget()
        self.spreadsheetActionsWidget.setGeometry(QRect(10, 10, 550, 300))
        self.spreadsheetActionsWidget.size = (570, 320)

        access_spreadsheet_button = QPushButton("Access Spreadsheet",
                                                self.spreadsheetActionsWidget)
        access_spreadsheet_button.clicked.connect(self.accessSpreadsheetButtonClicked)
        access_spreadsheet_button.setGeometry(QRect(10, 10, 525, 25))

        create_and_maintain_button = QPushButton("Create New Spreadsheet Maintaining the Old One",
                                                 self.spreadsheetActionsWidget)
        create_and_maintain_button.clicked.connect(self.createAndMaintainButtonClicked)
        create_and_maintain_button.setGeometry(QRect(10, 40, 525, 25))

        create_and_delete_button = QPushButton("Create New Spreadsheet Deleting the Old One",
                                               self.spreadsheetActionsWidget)
        create_and_delete_button.clicked.connect(self.createAndDeleteButtonClicked)
        create_and_delete_button.setGeometry(QRect(10, 70, 525, 25))

        categories_group = QGroupBox("Expenses Categories", self.spreadsheetActionsWidget)
        categories_group.setGeometry(QRect(10, 110, 525, 140))
        categories_group.setStyleSheet("QGroupBox { font-weight: bold; } ")
        categories_layout = QHBoxLayout()

        self.addCategoryLine = QLineEdit()

        add_category_button = QPushButton("Add New Category")
        add_category_button.clicked.connect(self.addCategoryButtonClicked)

        self.delCategoryComboBox = QComboBox()

        del_category_button = QPushButton("Delete Category")
        del_category_button.clicked.connect(self.delCategoryButtonClicked)

        add_categories_layout = QVBoxLayout()
        del_categories_layout = QVBoxLayout()

        add_categories_layout.addWidget(self.addCategoryLine)
        add_categories_layout.addWidget(add_category_button)

        del_categories_layout.addWidget(self.delCategoryComboBox)
        del_categories_layout.addWidget(del_category_button)

        add_categories_widget = QWidget()
        del_categories_widget = QWidget()

        add_categories_widget.setLayout(add_categories_layout)
        del_categories_widget.setLayout(del_categories_layout)

        categories_layout.addWidget(add_categories_widget)
        categories_layout.addWidget(del_categories_widget)

        categories_group.setLayout(categories_layout)

    def fillExpensesTableData(self):
        latest_expenses = SpreadsheetHandler().get_latest_upload("expenses")

        self.expensesTable.setRowCount(len(latest_expenses))

        for row_index, row in enumerate(latest_expenses):
            for column_index, cell_content in enumerate(row):
                self.expensesTable.setItem(row_index, column_index,
                                           QTableWidgetItem(cell_content))

    def fillIncomesTableData(self):
        latest_incomes = SpreadsheetHandler().get_latest_upload("incomes")

        self.incomesTable.setRowCount(len(latest_incomes))

        for row_index, row in enumerate(latest_incomes):
            for column_index, cell_content in enumerate(row):
                self.incomesTable.setItem(row_index, column_index,
                                          QTableWidgetItem(cell_content))

    def addCategories(self, new_items):
        self.expenseCategoriesComboBox.insertItems(0, new_items)
        self.delCategoryComboBox.insertItems(0, new_items)

    def resetCategoriesComboBox(self):
        spreadsheet_hdl = SpreadsheetHandler()

        categories = spreadsheet_hdl.read_categories()

        self.expenseCategoriesComboBox.clear()
        self.delCategoryComboBox.clear()

        self.addCategories(categories)

    def submitExpenseButtonClicked(self):
        spreadsheet_hdl = SpreadsheetHandler()
        appctx = ApplicationContext()

        if self.nonRecurringExpenseBox.checkState() == 2:
            recurring_status = "Non-Recurring"
        else:
            recurring_status = "Recurring"

        data = [
            ["=MONTH(\""+self.expenseDateEdit.date().toString("MM/dd/yyyy")+"\")",
             self.expenseDateEdit.date().toString("MM/dd/yyyy"),
             str(self.expenseDoubleSpinBox.value()),
             self.expenseCategoriesComboBox.currentText(),
             self.expenseSpecificationLine.text(),
             recurring_status,
             self.expenseObservationLine.text()
             ]
        ]

        for index in range(len(data[0])):
            if data[0][index] == "":
                data[0][index] = "-"

        spreadsheet_hdl.append_data(data, range="Expenses")
        spreadsheet_hdl.expenses_sort_by_date()

        alert = QMessageBox()
        alert.setWindowTitle("Expense Submitted")
        alert.setWindowIcon(QIcon(appctx.get_resource("submit.ico")))
        alert.setText("The expense was submitted!")
        alert.exec_()

    def submitIncomeButtonClicked(self):
        spreadsheet_hdl = SpreadsheetHandler()
        appctx = ApplicationContext()

        data = [
            ["=MONTH(\""+self.incomesDateEdit.date().toString("MM/dd/yyyy")+"\")",
             self.incomesDateEdit.date().toString("MM/dd/yyyy"),
             str(self.incomesDoubleSpinBox.value()),
             self.incomesSpecificationLine.text(),
             self.incomesObservationLine.text()
             ]
        ]

        for index in range(len(data[0])):
            if data[0][index] == "":
                data[0][index] = "-"

        spreadsheet_hdl.append_data(data, range="Incomes")
        spreadsheet_hdl.income_sort_by_date()

        alert = QMessageBox()
        alert.setWindowTitle("Income Submitted")
        alert.setWindowIcon(QIcon(appctx.get_resource("submit.ico")))
        alert.setText("The income was submitted!")
        alert.exec_()

    def updateExpensesTableButtonClicked(self):
        self.expensesTable.clearContents()
        self.fillExpensesTableData()

    def updateIncomesTableButtonClicked(self):
        self.incomesTable.clearContents()
        self.fillIncomesTableData()

    def accessSpreadsheetButtonClicked(self):
        spreadsheet_hdl = SpreadsheetHandler()
        webbrowser.open("https://docs.google.com/spreadsheets/d/" +
                        spreadsheet_hdl.spreadsheet_id)

    def createAndMaintainButtonClicked(self):
        appctx = ApplicationContext()

        spreadsheet_hdl = SpreadsheetHandler()
        spreadsheet_hdl.rename_spreadsheet(spreadsheet_hdl.file_name + '_OLD')
        spreadsheet_hdl.create_spreadsheet()

        self.resetCategoriesComboBox()

        alert = QMessageBox()
        alert.setWindowTitle("Spreadsheet Reset")
        alert.setWindowIcon(QIcon(appctx.get_resource("sheets.ico")))
        alert.setText("A new spreadsheet was created! To access the old "
                      "spreadsheet, look for Expenses Tracker_OLD in your Drive.")
        alert.exec_()

    def createAndDeleteButtonClicked(self):
        appctx = ApplicationContext()

        alert = QMessageBox()
        alert.setIcon(QMessageBox.Question)
        alert.setText("All information present "
                      "on the current spreadsheet "
                      "will be lost. "
                      "Are you sure you wish to continue?")
        alert.setWindowTitle("Spreadsheet Reset Confirmation")
        alert.setWindowIcon(QIcon(appctx.get_resource("sheets.ico")))
        alert.setStandardButtons(QMessageBox.Yes | QMessageBox.No)
        alert.setDefaultButton(QMessageBox.No)
        reply = alert.exec_()

        if reply == alert.Yes:
            spreadsheet_hdl = SpreadsheetHandler()
            spreadsheet_hdl.delete_spreadsheet()
            spreadsheet_hdl.create_spreadsheet()

            self.resetCategoriesComboBox()

            alert = QMessageBox()
            alert.setWindowTitle("Spreadsheet Reset")
            alert.setWindowIcon(QIcon(appctx.get_resource("sheets.ico")))
            alert.setText("A new spreadsheet was created!")
            alert.exec_()

    def addCategoryButtonClicked(self):
        spreadsheet_hdl = SpreadsheetHandler()
        appctx = ApplicationContext()

        new_category = self.addCategoryLine.text()

        categories = spreadsheet_hdl.read_categories()

        if new_category in categories:
            alert = QMessageBox()
            alert.setWindowTitle("Category Adding")
            alert.setWindowIcon(QIcon(appctx.get_resource("sheets.ico")))
            alert.setText("The category " + new_category + " already exists.")
            alert.exec_()
            return

        spreadsheet_hdl.add_category(new_category)

        self.resetCategoriesComboBox()

        alert = QMessageBox()
        alert.setWindowTitle("Category Adding")
        alert.setWindowIcon(QIcon(appctx.get_resource("sheets.ico")))
        alert.setText("The category " + new_category + " was succesfully added!")
        alert.exec_()

    def delCategoryButtonClicked(self):
        spreadsheet_hdl = SpreadsheetHandler()
        appctx = ApplicationContext()

        category_to_be_del = self.delCategoryComboBox.currentText()

        spreadsheet_hdl.delete_category(category_to_be_del)

        self.resetCategoriesComboBox()

        alert = QMessageBox()
        alert.setWindowTitle("Category Deleting")
        alert.setWindowIcon(QIcon(appctx.get_resource("sheets.ico")))
        alert.setText("The category " + category_to_be_del + " was succesfully deleted!")
        alert.exec_()

    def adjustTabWidgetSize(self):
        current_tab = self.tabsWidget.currentWidget()
        self.resize(current_tab.size[0],
                    current_tab.size[1])
コード例 #8
0
 def updateEditorGeometry(self, editor: QDateEdit, option,
                          index: QModelIndex) -> None:
     editor.setGeometry(option.rect)
コード例 #9
0
class AddEmployeeDetails(QMainWindow):

    closing = pyqtSignal(int)

    def __init__(self, parent, update, id=None):
        super().__init__(parent)

        self.parent = parent

        self.db = DB()

        self.initUI(update, id)

    def initUI(self, update, id):

        self.setWindowModality(Qt.ApplicationModal)

        frame = QFrame()
        # frame.setStyleSheet("background-color: rgb(30, 45, 66);")
        frame.setFrameShape(QFrame.StyledPanel)
        frame.setFrameShadow(QFrame.Raised)
        # frame.setMinimumWidth(430)
        # frame.setFixedHeight(395)
        frame.setStyleSheet("border: none")

        add_employee_button = QLabel(frame)
        add_employee_button.setAlignment(Qt.AlignCenter)
        add_employee_button.setGeometry(QRect(110, 30, 210, 41))
        add_employee_button.setStyleSheet("font: 75 12pt \"MS Shell Dlg 2\";\n"
                                 "background-color: rgb(30, 45, 66);\n"
                                 "color: rgb(255, 255, 255);")
        add_employee_button.setText("Add Employee Details")

        # name = QHBoxLayout()
        # jobtitle = QHBoxLayout()
        # salary = QHBoxLayout()
        # bonus = QHBoxLayout()
        # joindate = QHBoxLayout()

        namelabel = QLabel(frame)
        namelabel.setText("Name")
        namelabel.setGeometry(QRect(80, 100, 47, 13))

        self.nametextbox = QLineEdit(frame)
        self.nametextbox.setGeometry(QRect(160, 90, 181, 31))
        self.nametextbox.setFixedWidth(180)

        jobtitlelabel = QLabel(frame)
        jobtitlelabel.setText("Job Title")
        jobtitlelabel.setGeometry(QRect(80, 140, 61, 16))

        self.jobtitletextbox = QComboBox(frame)
        self.jobtitletextbox.setGeometry(QRect(160, 130, 181, 31))
        self.jobtitletextbox.setFixedWidth(180)
        self.jobtitletextbox.addItems(["Manager", "Waiter", "Chef", "Security"])

        salarylabel = QLabel(frame)
        salarylabel.setText("Salary")
        salarylabel.setGeometry(QRect(80, 180, 47, 13))

        self.salarytextbox = QLineEdit(frame)
        self.salarytextbox.setGeometry(QRect(160, 170, 181, 31))
        self.salarytextbox.setFixedWidth(180)
        self.salarytextbox.setValidator(QIntValidator())

        # bonuslabel = QLabel(frame)
        # bonuslabel.setText("Bonus")
        # bonuslabel.setGeometry(QRect(80, 220, 47, 13))

        # bonustextbox = QLineEdit(frame)
        # bonustextbox.setGeometry(QRect(160, 210, 181, 31))
        # bonustextbox.setFixedWidth(180)

        joindatelabel = QLabel(frame)
        joindatelabel.setText("Start Date")
        joindatelabel.setGeometry(QRect(80, 260, 71, 16))

        self.joindatetextbox = QDateEdit(frame)
        self.joindatetextbox.setGeometry(QRect(160, 250, 181, 31))
        self.joindatetextbox.setFixedWidth(180)
        self.joindatetextbox.setDate(QDate.currentDate())
        self.joindatetextbox.setMinimumDate(QDate.currentDate())
        self.joindatetextbox.setDisplayFormat("dd-MM-yyyy")

        self.addbutton = QPushButton(frame)
        self.addbutton.setGeometry(QRect(160, 300, 111, 31))
        self.addbutton.setStyleSheet("font: 75 12pt \"MS Shell Dlg 2\";\n"
                                   "background-color: rgb(30, 45, 66);\n"
                                   "color: rgb(255, 255, 255);")
        if update == 'add':
            print("Add")
            print(id)
            self.addbutton.setText("Add Employee")
            self.addbutton.clicked.connect(lambda: self.add_button_click("employee"))
        else:
            print("Update")
            print(id)
            self.addbutton.setText("Update Employee")
            self.addbutton.clicked.connect(lambda: self.update_button_click("employee", id))

        layout = QVBoxLayout()
        layout.setContentsMargins(0, 0, 0, 0)
        layout.addWidget(frame)

        centralWidget = QWidget()
        centralWidget.setLayout(layout)

        self.setCentralWidget(centralWidget)

        # self.setLayout(layout)

        self.setWindowTitle("Add Employee Details")
        self.resize(430, 395)
        self.show()

        self.center()

    def center(self):
        '''centers the window on the screen'''
        screen = QDesktopWidget().screenGeometry()
        size = self.geometry()
        self.move((screen.width() - size.width()) / 2,
                  (screen.height() - size.height()) / 2)

    def update_button_click(self, where, id):
        if where == "employee":
            print("Employees Finally here")

            print(self.nametextbox.text())
            print(self.jobtitletextbox.currentText())
            print(self.salarytextbox.text())
            print(self.joindatetextbox.text())

            employee_name = self.nametextbox.text()
            job_title = self.jobtitletextbox.currentText()
            salary = self.salarytextbox.text()

            try:
                date = datetime.datetime.strptime(self.joindatetextbox.text(), "%d-%m-%Y")
                joining_date = datetime.datetime.strftime(date, "%Y-%m-%d")
            except:
                ''' Make sure to add an error message. '''
                return

            if employee_name != "" and salary != "":
                query = "update employee set `employee_name`=%s, `job_title`=%s, `salary`=%s, " \
                        "`joining_date`=%s where id=%s"
                values = (employee_name, job_title, salary, joining_date, id)

                result = self.db.execute(query, values)

                self.closeEvent = self.message()

    def add_button_click(self, where):
        if where == "employee":
            print("Employees Finally here")

            print(self.nametextbox.text())
            print(self.jobtitletextbox.currentText())
            print(self.salarytextbox.text())
            print(self.joindatetextbox.text())

            employee_name = self.nametextbox.text()
            job_title = self.jobtitletextbox.currentText()
            salary = self.salarytextbox.text()

            try:
                date = datetime.datetime.strptime(self.joindatetextbox.text(), "%d-%m-%Y")
                joining_date = datetime.datetime.strftime(date, "%Y-%m-%d")
            except:
                ''' Make sure to add an error message. '''
                return

            if employee_name != "" and salary != "":
                query = "insert into employee (`employee_name`, `job_title`,`salary`, `joining_date`)" \
                        "values (%s, %s, %s, %s);"
                values = (employee_name, job_title, salary, joining_date)

                result = self.db.execute(query, values)

                self.closeEvent = self.message()

    def message(self):
        self.closing.emit(1)
        self.close()

    # def closeEvent(self, event):
    #     print("Closed")
    #     self.closing.emit()
    #     # self.parent.update()
コード例 #10
0
ファイル: MainWindow.py プロジェクト: Veter-ok/Bookkeeping
class Ui_Form(object):
    def setupUi(self, widget):
        now = datetime.now()
        widget.resize(2000, 1200)
        widget.setWindowIcon(QIcon("icons/bookkeeping.ico"))
        widget.setToolTipDuration(-1)
        widget.setStyleSheet("QPushButton:hover{\n"
                             "background-color: silver;\n"
                             "}")
        # SHOW CHART BUTTON
        self.chartBtn = QPushButton(widget)
        self.chartBtn.setGeometry(1620, 20, 250, 110)
        self.chartBtn.setStyleSheet("background: lightgreen;\n"
                                    "color: white;\n"
                                    "font-size: 40px;")
        self.chartBtn.setText("Диаграмма")
        # SELECT TYPES CHARTS
        self.TypesCharts = QComboBox(widget)
        self.TypesCharts.setGeometry(1650, 150, 200, 40)
        self.TypesCharts.setStyleSheet("font-size: 30px;")
        self.TypesCharts.addItem("общая")
        self.TypesCharts.addItem("по времени")
        self.TypesCharts.addItem("по типам")
        self.TypesCharts.addItem("по продуктам")
        # TAB WIDGET EXPENSES AND INCOME
        self.MainTab = QTabWidget(widget)
        self.MainTab.setGeometry(1, 10, 1480, 1110)
        # TEBLE EXPENSES
        self.tableExpenses = QTableWidget(widget)
        self.tableExpenses.setGeometry(5, 5, 1480, 1110)
        self.tableExpenses.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn)
        self.tableExpenses.setAutoScroll(True)
        self.tableExpenses.setRowCount(1000)
        self.tableExpenses.setColumnCount(5)
        self.tableExpenses.horizontalHeader().setDefaultSectionSize(270)
        self.tableExpenses.verticalHeader().setDefaultSectionSize(50)
        self.tableExpenses.setStyleSheet(u"font-size: 30px;")
        self.tableExpenses.setHorizontalHeaderLabels(
            ('Сумма', 'Продукт', 'Дата', 'Тип', 'Источник'))
        # TEBLE INCOME
        self.tableIncome = QTableWidget(widget)
        self.tableIncome.setGeometry(5, 5, 1480, 1110)
        self.tableIncome.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn)
        self.tableIncome.setAutoScroll(True)
        self.tableIncome.setRowCount(1000)
        self.tableIncome.setColumnCount(5)
        self.tableIncome.horizontalHeader().setDefaultSectionSize(270)
        self.tableIncome.verticalHeader().setDefaultSectionSize(50)
        self.tableIncome.setStyleSheet(u"font-size: 30px;")
        self.tableIncome.setHorizontalHeaderLabels(
            ('Сумма', 'Продукт', 'Дата', 'Тип', 'Источник'))

        self.tableGave = QTableWidget(widget)
        self.tableGave.setGeometry(5, 5, 1480, 1110)
        self.tableGave.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn)
        self.tableGave.setAutoScroll(True)
        self.tableGave.setRowCount(1000)
        self.tableGave.setColumnCount(4)
        self.tableGave.horizontalHeader().setDefaultSectionSize(338)
        self.tableGave.verticalHeader().setDefaultSectionSize(50)
        self.tableGave.setStyleSheet(u"font-size: 30px;")
        self.tableGave.setHorizontalHeaderLabels(
            ('Сумма', 'Кому', 'Когда', 'Вернули'))

        self.tableTook = QTableWidget(widget)
        self.tableTook.setGeometry(5, 5, 1480, 1110)
        self.tableTook.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn)
        self.tableTook.setAutoScroll(True)
        self.tableTook.setRowCount(1000)
        self.tableTook.setColumnCount(4)
        self.tableTook.horizontalHeader().setDefaultSectionSize(338)
        self.tableTook.verticalHeader().setDefaultSectionSize(50)
        self.tableTook.setStyleSheet(u"font-size: 30px;")
        self.tableTook.setHorizontalHeaderLabels(
            ('Сумма', 'У кого', 'Когда', 'Использовал'))
        # ADD TAB TO TabWidget FOR EXPENSES AND INCOME
        self.MainTab.addTab(self.tableExpenses, "Расходы")
        self.MainTab.addTab(self.tableIncome, "Доходы")
        self.MainTab.addTab(self.tableTook, "Взял")
        self.MainTab.addTab(self.tableGave, "Дал")
        # TOTAL EXPENSES AND INCOME LABEL
        self.TotalLabel = QLabel(widget)
        self.TotalLabel.setGeometry(10, 1130, 1000, 60)
        self.TotalLabel.setStyleSheet("font-size: 39px;")
        self.TotalLabel.setText("Итоговй расход: ")
        # TOTAL LABEL
        self.TotalLabel_2 = QLabel(widget)
        self.TotalLabel_2.setGeometry(550, 1130, 1000, 60)
        self.TotalLabel_2.setStyleSheet("font-size: 39px;")
        self.TotalLabel_2.setText("Итог:  ")

        self.percentTotalLabel = QLabel(widget)
        self.percentTotalLabel.setGeometry(850, 1130, 1000, 60)
        self.percentTotalLabel.setStyleSheet("font-size: 39px;\n"
                                             "color: green;")
        # GROUP BOX (DELET EXPENSES AND INCOME)
        self.groupBoxType = QGroupBox(widget)
        self.groupBoxType.setGeometry(1500, 200, 480, 300)
        self.groupBoxType.setStyleSheet("font-size: 30px;")
        # ROW DELET
        self.RowDelet = QSpinBox(self.groupBoxType)
        self.RowDelet.setGeometry(250, 80, 200, 50)
        self.RowDelet.setMaximum(1000000)
        self.RowDelet.setMinimum(1)
        # BUTTON FOR DELETE EXPENSES OR INCOME
        self.DeletBtn = QPushButton(self.groupBoxType)
        self.DeletBtn.setGeometry(140, 210, 220, 70)
        self.DeletBtn.setStyleSheet("background: lightgreen;\n"
                                    "color: white;\n"
                                    "font-size: 40px;")
        self.DeletBtn.setText("Удалить")
        # ROW LABEL
        self.RowLabel = QLabel(self.groupBoxType)
        self.RowLabel.setGeometry(30, 80, 200, 50)
        self.RowLabel.setStyleSheet("font-size: 30px;")
        # GROUP BOX (ADD EXPENSES)
        self.groupBox = QGroupBox(widget)
        self.groupBox.setGeometry(1500, 560, 480, 600)
        self.groupBox.setStyleSheet("font-size: 30px;")
        self.groupBox.setTitle("Удалить Расход")
        # ADD BUTTON
        self.Add = QPushButton(self.groupBox)
        self.Add.setGeometry(110, 480, 230, 110)
        self.Add.setStyleSheet("background-color: lightgreen;\n"
                               "color: white;\n"
                               "font-size: 50px;")
        self.Add.setText("Добавить")
        # PRICE LABEL
        self.PriceLabel = QLabel(self.groupBox)
        self.PriceLabel.setGeometry(20, 50, 130, 31)
        self.PriceLabel.setStyleSheet("font-size: 30px;")
        # PRICE ENTERY
        self.PriceEntery = QLineEdit(self.groupBox)
        self.PriceEntery.setGeometry(200, 40, 200, 50)
        self.PriceEntery.setTabletTracking(False)
        self.PriceEntery.setContextMenuPolicy(Qt.DefaultContextMenu)
        self.PriceEntery.setAutoFillBackground(False)
        self.PriceEntery.setFrame(True)
        self.PriceEntery.setEchoMode(QLineEdit.Normal)
        self.PriceEntery.setCursorPosition(0)
        self.PriceEntery.setDragEnabled(False)
        self.PriceEntery.setCursorMoveStyle(Qt.LogicalMoveStyle)
        self.PriceEntery.setClearButtonEnabled(False)
        # PRODUCT LABEL
        self.ProductLabel = QLabel(self.groupBox)
        self.ProductLabel.setGeometry(20, 135, 130, 31)
        self.ProductLabel.setStyleSheet("font-size: 30px;")
        # PRODUCT ENTERY
        self.ProductEntery = QLineEdit(self.groupBox)
        self.ProductEntery.setGeometry(200, 125, 200, 50)
        self.ProductEntery.setTabletTracking(False)
        self.ProductEntery.setContextMenuPolicy(Qt.DefaultContextMenu)
        self.ProductEntery.setAutoFillBackground(False)
        self.ProductEntery.setFrame(True)
        self.ProductEntery.setEchoMode(QLineEdit.Normal)
        self.ProductEntery.setCursorPosition(0)
        self.ProductEntery.setDragEnabled(False)
        self.ProductEntery.setCursorMoveStyle(Qt.LogicalMoveStyle)
        self.ProductEntery.setClearButtonEnabled(False)
        # TYPE LABEL
        self.TypeLabel = QLabel(self.groupBox)
        self.TypeLabel.setGeometry(20, 200, 130, 40)
        self.TypeLabel.setStyleSheet("font-size: 30px;")
        # TYPE ENTERY
        self.TypeEntery = QComboBox(self.groupBox)
        self.TypeEntery.setGeometry(200, 200, 200, 40)
        self.TypeEntery.addItem("продукты")
        self.TypeEntery.addItem("транспорт")
        self.TypeEntery.addItem("развлечения")
        self.TypeEntery.addItem("техника")
        self.TypeEntery.addItem("одежда")
        self.TypeEntery.addItem("учёба")
        self.TypeEntery.addItem("книги")
        self.TypeEntery.addItem("другое")
        # DATE LABEL
        self.DateLabel = QLabel(self.groupBox)
        self.DateLabel.setGeometry(20, 270, 130, 31)
        self.DateLabel.setStyleSheet("font-size: 30px;")
        # DATE ENTERY
        self.DateEntery = QDateEdit(self.groupBox)
        self.DateEntery.setGeometry(200, 270, 200, 40)
        self.DateEntery.setDate(QDate(now.year, now.month, now.day))

        self.sourceLabel = QLabel(self.groupBox)
        self.sourceLabel.setGeometry(20, 350, 130, 31)
        self.sourceLabel.setText("Источник")

        self.sourceEntery = QComboBox(self.groupBox)
        self.sourceEntery.setGeometry(200, 350, 200, 40)
        self.sourceEntery.addItem("мои деньги")

        self.retranslateUi(widget)

        QMetaObject.connectSlotsByName(widget)

    # setupUi

    def retranslateUi(self, widget):
        widget.setWindowTitle(
            QCoreApplication.translate("widget", u"Бухгалтерия", None))
        #if QT_CONFIG(whatsthis)
        widget.setWhatsThis(
            QCoreApplication.translate(
                "widget",
                u"<html><head/><body><p align=\"center\">wdas</p></body></html>",
                None))
        #endif // QT_CONFIG(whatsthis)
        __sortingEnabled = self.tableExpenses.isSortingEnabled()
        self.tableExpenses.setSortingEnabled(False)
        self.tableExpenses.setSortingEnabled(__sortingEnabled)

        self.RowLabel.setText(
            QCoreApplication.translate("widget", u"Строка", None))
        self.groupBox.setTitle(
            QCoreApplication.translate("widget", u"Добавить Расход", None))
        self.TypeLabel.setText(
            QCoreApplication.translate("widget", u"Тип", None))
        self.PriceLabel.setText(
            QCoreApplication.translate("widget", u"Сумма", None))
        self.ProductLabel.setText(
            QCoreApplication.translate("widget", u"Продукт", None))
        self.DateLabel.setText(
            QCoreApplication.translate("widget", u"Дата", None))
コード例 #11
0
class ProductSearcher(QDialog):
    def __init__(self):
        super().__init__(None,
                         Qt.WindowCloseButtonHint | Qt.WindowSystemMenuHint)
        self.setFixedSize(880, 560)
        self.tableScrollArea = ProductTable(self)
        self.usrList = getUsrList()

        self.photoLabel = QLabel(self)
        self.photoLabel.setGeometry(QRect(10, 10, 450, 310))

        self.prevPhotoButton = QPushButton("Previous", self)
        self.prevPhotoButton.setGeometry(QRect(10, 330, 88, 21))
        self.prevPhotoButton.setFont(smallFont)
        self.nextPhotoButton = QPushButton("Next", self)
        self.nextPhotoButton.setGeometry(QRect(110, 330, 88, 21))
        self.nextPhotoButton.setFont(smallFont)
        self.idLabel = QLabel("Id: ", self)
        self.idLabel.setGeometry(QRect(220, 330, 241, 18))
        self.idLabel.setFont(smallFont)
        self.idLabel.setStyleSheet("""
border: 1px solid black;\n
background-color: white;\n
color: black;
""")

        self.line = QFrame(self)
        self.line.setGeometry(QRect(10, 470, 861, 20))
        self.line.setFrameShape(QFrame.HLine)
        self.line.setFrameShadow(QFrame.Sunken)

        self.titleLabel = QLabel("Results:    0", self)
        self.titleLabel.setGeometry(QRect(470, 10, 121, 20))
        self.titleLabel.setFont(bigFont)

        self.dateToDEdit = QDateEdit(self)
        self.dateToDEdit.setGeometry(QRect(690, 520, 100, 30))
        self.dateToDEdit.setDate(QDate.currentDate())

        self.dateFromDEdit = QDateEdit(self)
        self.dateFromDEdit.setGeometry(QRect(580, 520, 100, 30))
        self.dateFromDEdit.setDate(QDate.currentDate())

        self.userComboBox = QComboBox(self)
        self.userComboBox.setGeometry(QRect(250, 520, 140, 30))
        self.userComboBox.addItems(self.usrList)

        self.phraseLEdit = QLineEdit(self)
        self.phraseLEdit.setGeometry(QRect(400, 520, 170, 30))

        self.findButton = QPushButton("Find", self)
        self.findButton.setGeometry(QRect(800, 490, 70, 61))

        self.idLEdit = QLineEdit(self)
        self.idLEdit.setGeometry(QRect(10, 520, 230, 30))

        self.dateFromCBox = QCheckBox("Date from", self)
        self.dateFromCBox.setGeometry(QRect(580, 490, 100, 20))
        self.dateFromCBox.setFont(smallFont)

        self.dateToCBox = QCheckBox("Date to", self)
        self.dateToCBox.setGeometry(QRect(690, 490, 100, 20))
        self.dateToCBox.setFont(smallFont)

        self.phraseCBox = QCheckBox("Phrase", self)
        self.phraseCBox.setGeometry(QRect(400, 490, 100, 20))
        self.phraseCBox.setFont(smallFont)

        self.userCBox = QCheckBox("User", self)
        self.userCBox.setGeometry(QRect(250, 490, 100, 20))
        self.userCBox.setFont(smallFont)

        self.idCBox = QCheckBox("Id", self)
        self.idCBox.setGeometry(QRect(10, 490, 100, 20))
        self.idCBox.setFont(smallFont)

        self.createdDate = QLabel(self)
        self.createdDate.setGeometry(QRect(10, 460, 201, 16))
        self.createdDate.setFont(smallFont)

        self.lastModLabel = QLabel(self)
        self.lastModLabel.setGeometry(QRect(240, 460, 221, 16))
        self.lastModLabel.setFont(smallFont)

        self.descriptionLabel = QLabel(self)
        self.descriptionLabel.setGeometry(QRect(10, 360, 451, 91))
        self.descriptionLabel.setFont(smallFont)
        self.descriptionLabel.setStyleSheet("""
border: 1px solid black;\n
background-color: white;\n
color: black;
""")
        self.descriptionLabel.setAlignment(Qt.AlignLeading | Qt.AlignLeft
                                           | Qt.AlignTop)
        self.setWindowTitle("Search For Products")
        self.tableScrollArea.displayProductList(findProducts())
        self.findButton.clicked.connect(self.findButtonClicked)
        self.nextPhotoButton.clicked.connect(self.nextPhotoClicked)
        self.prevPhotoButton.clicked.connect(self.previousPhotoClicked)

    def findButtonClicked(self):
        def dateCon(d: str):
            return d.replace(".", "-")

        productid = self.idLEdit.text() if self.idCBox.isChecked() else None
        usr = (self.userComboBox.currentText()
               if self.userCBox.isChecked() else None)
        phrase = (self.phraseLEdit.text()
                  if self.phraseCBox.isChecked() else None)
        dateFrom = (dateCon(self.dateFromDEdit.text()) +
                    "-00_00_00" if self.dateFromCBox.isChecked() else None)
        dateTo = (dateCon(self.dateToDEdit.text()) +
                  "-23_59_59" if self.dateToCBox.isChecked() else None)
        self.tableScrollArea.displayProductList(
            findProducts(
                id=productid,
                username=usr,
                phrase=phrase,
                timeFrom=dateFrom,
                timeTo=dateTo,
            ),
            usr,
        )

    def nextPhotoClicked(self):
        if self.currentItem is None:
            return
        self.photoCursor += 1
        if len(self.currentItem["filenames"]) == self.photoCursor:
            self.photoCursor = 0
        self.reloadPhoto()

    def previousPhotoClicked(self):
        if self.currentItem is None:
            return
        self.photoCursor -= 1
        if self.photoCursor < 0:
            self.photoCursor = len(self.currentItem["filenames"]) - 1
        self.reloadPhoto()

    def selectCurrentProduct(self, item):
        self.currentItem = item
        self.photoCursor = 0

        self.reloadPhoto()
        self.idLabel.setText("Id: {}".format(item["id"]))
        self.descriptionLabel.setText(item["desc"])
        self.createdDate.setText(f"Created: {item['creation_date'][0:10]}")
        self.lastModLabel.setText(
            f"Last modified: {item['last_updated'][0:10]}")

    def reloadPhoto(self):
        if not self.currentItem["filenames"]:
            pixmap = noImagePixmap
        else:
            pixmap = QPixmap()
            loaded = pixmap.load(
                self.currentItem["filenames"][self.photoCursor])
            if not loaded:
                pixmap = noImagePixmap

        self.photoLabel.setPixmap(
            pixmap.scaled(
                self.photoLabel.width(),
                self.photoLabel.height(),
                Qt.IgnoreAspectRatio,
                Qt.FastTransformation,
            ))