Ejemplo n.º 1
0
class PyQt5_view(QWidget):
    def __init__(self, parent=None):
        super(QWidget, self).__init__(parent)
        self.setWindowFlags(Qt.FramelessWindowHint | Qt.SplashScreen | Qt.WindowStaysOnTopHint)
        # Qt.WindowStaysOnBottomHint
        # self.setAttribute(Qt.WA_TranslucentBackground)


        self.setWindowIcon(QIcon(self.resource_path("Icon.ico")))
        # self.setWindowIcon(QIcon("Icon.ico"))

        # Инициализируем QSystemTrayIcon
        self.tray_icon = QSystemTrayIcon(self)
        self.tray_icon.setIcon(QIcon(self.resource_path("Icon.ico")))
        # self.tray_icon.setIcon(QIcon("Icon.ico"))
        # self.tray_icon.setIcon(self.style().standardIcon(QStyle.SP_ComputerIcon))

        show_action = QAction("Show", self)
        quit_action = QAction("Exit", self)
        hide_action = QAction("Hide", self)
        show_action.triggered.connect(self.show)
        hide_action.triggered.connect(self.hide)
        quit_action.triggered.connect(qApp.quit)
        tray_menu = QMenu()
        tray_menu.addAction(show_action)
        tray_menu.addAction(hide_action)
        tray_menu.addAction(quit_action)
        self.tray_icon.setContextMenu(tray_menu)
        self.tray_icon.show()



        # установить тему приложения: 0 - dark; 1 - white
        self.theme_init(0)

        self.init_ui()
        self.edit_opt(0)
        self.init_options_window()

        self.setWindowTitle("Lab trecker")

        # self.setWindowIcon(QIcon('img/logo.png'))

        self.show()

    def edit_opt(self, edit):
        if (edit):
            # self.setGeometry(770, 400, 510, 240)
            self.setFixedSize(510, 240)
            # self.init_options_window()
        else:
            self.setFixedSize(510, 200)
            # self.setGeometry(770, 400, 510, 200)

    def init_ui(self):
        self.table = Table()
        self.subject_names, self.max_lab_count, self.lab_maiking = self.table.Make_table()

        self.labels = [self.subject_names.__len__() * self.max_lab_count]
        self.labels_names = [self.subject_names.__len__()]

        self.ctrl_press = False
        self.prosent_add_maiking = 10
        self.square_id = 0
        self.x = 30
        self.y = 100
        self.margin = 120


        self.qle = QPushButton("X", self)
        self.qle.move(465, 200)
        self.qle.clicked.connect(self.close)
        self.qle.setFont(QFont('Ralleway', 14))
        self.qle.setStyleSheet(
            "color: #a0302d; "
            "max-height: 24px; "
            "max-width: 24px; ")

        self.smap = QSignalMapper(self)
        self.GetSquares()
        self.smap.mapped.connect(self.on_click)

    def theme_init(self, int):
        self.colored_theme = Color_theme_wb()

        if(int == 1):
            self.theme_color = self.colored_theme.theme_color_white
            self.sqare_colors = self.colored_theme.sqare_colors_white
            self.setStyleSheet("background-color: " + self.colored_theme.background_white)
            self.setWindowOpacity(self.colored_theme.opacity_white)
        else:
            self.theme_color = self.colored_theme.theme_color_black
            self.sqare_colors = self.colored_theme.sqare_colors_black
            self.setStyleSheet("background-color: " + self.colored_theme.background_black)
            self.setWindowOpacity(self.colored_theme.opacity_black)

    def init_options_window(self):
        untheme = 1
        strs_font = " color: rgb(" + str(self.theme_color[untheme][0]) + \
               ", " + str(self.theme_color[untheme][1]) + \
               ", " + str(self.theme_color[untheme][2]) + "); "

        self.combo =  QComboBox(self)
        for i in self.subject_names:
            self.combo.addItem(i.Name)
        self.combo.move(20, 200)
        self.combo.setFont(QFont('Ralleway', 12))
        self.combo.setStyleSheet( strs_font )


        self.line_edit = QLineEdit(self)
        self.line_edit.move(160, 200)
        self.line_edit.setFont(QFont('Ralleway', 12))
        self.line_edit.setStyleSheet(
            "max-width: 135px; " +  strs_font)


        self.spinBox =  QSpinBox(self)
        self.spinBox.move(302, 200)
        self.spinBox.setFont(QFont('Ralleway', 12))
        self.spinBox.setStyleSheet(strs_font)


        self.add_button = QPushButton("Add", self)
        self.add_button.move(355, 200)
        self.add_button.clicked.connect(self.ok_button)
        self.add_button.setFont(QFont('Ralleway', 12))
        self.add_button.setStyleSheet(
            "max-height: 25px; " 
            "max-width: 40px; " + strs_font )

        self.add_button = QPushButton("Del", self)
        self.add_button.move(396, 200)
        self.add_button.clicked.connect(self.dell_button)
        self.add_button.setFont(QFont('Ralleway', 12))
        self.add_button.setStyleSheet(
            "max-height: 25px; "
            "max-width: 40px; " +  strs_font)

        self.show()

    def GetSquares(self):
        for i in range(0, self.subject_names.__len__()):

            c1 = i * self.x * 1.2 + self.x/3
            label_n = self.Get_label(str(self.subject_names[i].SubID) + " " + str(self.subject_names[i].Name),
                           None, 20, c1, self.y + self.margin/2, self.x, False)
            self.labels_names.append(label_n)

            for j in range(0, self.lab_maiking[i].__len__()):

                c2 = j * self.x * 1.2 + self.x
                label = self.Get_label(str(int(self.lab_maiking[i][j])),
                              None, self.margin + 20 + c2, c1, self.x, self.x, True)


                label.clicked.connect(self.smap.map)  # соединить
                self.smap.setMapping(label, self.square_id)

                label.x = i
                label.y = j
                label.color, label.color_font = self.get_color(self.lab_maiking[i][j])

                self.set_label_color(label)

                self.labels.append(label)
                self.square_id += 1

    def Get_label(self, text, color, x, y, width, height, aline) -> ClickLabel:
        label_sq = ClickLabel(self)
        label_sq.setText(str(text))
        label_sq.setFont(QFont("Ralleway", 12))
        if(aline):
            label_sq.setAlignment(Qt.AlignCenter)

        untheme = 1

        strs = "color: rgb(" + str(self.theme_color[untheme][0]) + \
               ", " + str(self.theme_color[untheme][1]) + \
               ", " + str(self.theme_color[untheme][2]) + ")"
        label_sq.setStyleSheet("background-color: " + str(color) + ";" + strs)
        label_sq.setGeometry(x, y, width, height)

        return label_sq

    @pyqtSlot(int)
    def on_click(self, id):
        # print(str(id) + "  " + str(self.labels[id + 1].x) + "," + str(self.labels[id + 1].y))
        if(self.ctrl_press):
            prosent_add_maiking = -self.prosent_add_maiking
        else:
            prosent_add_maiking = self.prosent_add_maiking


        self.lab_maiking[self.labels[id + 1].x][self.labels[id + 1].y] += prosent_add_maiking
        z = self.lab_maiking[self.labels[id + 1].x][self.labels[id + 1].y]

        if(100 >= z >= 0):
            self.labels[id + 1].setText(str(self.lab_maiking[self.labels[id + 1].x][self.labels[id + 1].y]))
            self.labels[id + 1].color, self.labels[id + 1].color_font = \
                self.get_color(self.lab_maiking[self.labels[id + 1].x][self.labels[id + 1].y])
            self.set_label_color(self.labels[id + 1])
            self.update()

            self.table.Update_square(self.labels[id + 1].y,
                                     self.subject_names[self.labels[id + 1].x].Name,
                                     prosent_add_maiking)

        else:
            self.lab_maiking[self.labels[id + 1].x][self.labels[id + 1].y] -= prosent_add_maiking

        # self.subject_names, self.max_lab_count, self.lab_maiking = self.table.Make_table()

    def set_label_color(self, label):
        strs = "background-color: rgb(" + str(label.color[0]) + \
               ", " + str(label.color[1]) + \
               ", " + str(label.color[2]) + "); "

        # untheme = 1
        # strs_font = "color: rgb(" + str(self.theme_color[untheme][0]) + \
        #        ", " + str(self.theme_color[untheme][1]) + \
        #        ", " + str(self.theme_color[untheme][2]) + ")"


        label.setStyleSheet(strs  + label.color_font)


    def get_color(self, count):
        l = []

        m = int(count/20)
        if(m >= self.sqare_colors.__len__()):
            m = self.sqare_colors.__len__() - 1
        l = self.sqare_colors[m]

        untheme = 0
        if(count < 20):
            untheme = 1

        strs_font = "color: rgb(" + str(self.theme_color[untheme][0]) + \
               ", " + str(self.theme_color[untheme][1]) + \
               ", " + str(self.theme_color[untheme][2]) + ")"

        return l , strs_font

    def ok_button(self):
        if(self.line_edit.text().__len__() == 0):
            self.table.Change_lab_count(self.combo.currentText(), self.spinBox.text())
        else:
            self.table.Add_new_Subject(self.line_edit.text(), self.spinBox.text())

    def dell_button(self):
        self.table.Delete_subject(str(self.combo.currentText()))


    # вызывается при нажатии кнопки мыши
    def mousePressEvent(self, event):
        if event.button() == Qt.LeftButton:
            self.old_pos = event.pos()


    # вызывается при отпускании кнопки мыши
    def mouseReleaseEvent(self, event):
        if event.button() == Qt.LeftButton:
            self.old_pos = None

    # вызывается всякий раз, когда мышь перемещается
    def mouseMoveEvent(self, event):
        if not self.old_pos:
            return
        delta = event.pos() - self.old_pos
        self.move(self.pos() + delta)

    def keyPressEvent(self, e):
        if e.key() == Qt.Key_Control:
            self.ctrl_press = True
        if e.key() == Qt.Key_Shift:
            if(self.height() > 210):
                self.edit_opt(0)
            else:
                self.edit_opt(1)


    def keyReleaseEvent(self, e):
        if e.key() == Qt.Key_Control:
            self.ctrl_press = False

    def closeEvent(self, event):
        event.ignore()
        self.hide()

#     def resource_path(self, relative_path):
#         if hasattr(sys, '_MEIPASS'):
#             return os.path.join(sys._MEIPASS, relative_path)
#         return os.path.join(os.path.abspath("."), relative_path)
#
#
# def resource_path(relative):
#     return os.path.join(
#         os.environ.get(
#             "_MEIPASS2",
#             os.path.abspath(".")
#         ),
#         relative
#     )

    def resource_path(self, relative_path):
        base_path = getattr(sys, '_MEIPASS', os.path.dirname(os.path.abspath(__file__)))
        return os.path.join(base_path, relative_path)