Exemplo n.º 1
0
    def manage_menu(self):
        self.table = QTableWidget()
        self.table.setStyleSheet("background:#fff")
        self.table.resize(self.width(), self.height())
        self.table.setColumnCount(7)

        self.table.horizontalHeader().setSectionResizeMode(
            QHeaderView.ResizeToContents
        )
        self.table.setHorizontalHeaderItem(0, QTableWidgetItem("License Plate"))
        self.table.setHorizontalHeaderItem(1, QTableWidgetItem("Car Brand"))
        self.table.setHorizontalHeaderItem(2, QTableWidgetItem("Owner Name"))
        self.table.setHorizontalHeaderItem(3, QTableWidgetItem("Space ID"))
        self.table.setHorizontalHeaderItem(4, QTableWidgetItem("Check-in time"))
        self.table.setHorizontalHeaderItem(5, QTableWidgetItem("Discount"))
        self.table.setHorizontalHeaderItem(6, QTableWidgetItem("ACTION"))

        self.refresh_manage_menu()

        frame = QFrame()
        layout = QVBoxLayout()
        layout.setContentsMargins(0, 0, 0, 0)
        layout.setSpacing(0)
        layout.addWidget(self.table)
        frame.setLayout(layout)
        frame.setContentsMargins(0, 0, 0, 0)
        frame.setMaximumWidth(self.width())
        frame.setMinimumWidth(self.width())
        frame.setMaximumHeight(self.height())
        frame.setMinimumHeight(self.height())
        self.vertical_3.addWidget(frame)
        self.vertical_3.addStretch()
Exemplo n.º 2
0
class EditColorValue(QWidget):
    def __init__(self, value):
        super().__init__()

        self._val = value

        self._rootLayout = QHBoxLayout()

        self._colorLineEdit = QLineEdit()
        self._colorLineEdit.setAlignment(Qt.AlignRight)
        self._colorLineEdit.setReadOnly(True)
        self._rootLayout.addWidget(self._colorLineEdit)

        self._frame = QFrame()
        self._frame.setFrameStyle(QFrame.StyledPanel)
        self._frame.setFrameShadow(QFrame.Plain)
        self._frameLayout = QHBoxLayout()

        self._colorSelectBt = QPushButton()
        self._colorSelectBt.setFlat(True)
        self._colorSelectBt.clicked.connect(self._signal_colorSelectBt_clicked)

        self._frameLayout.setContentsMargins(0, 0, 0, 0)
        self._frameLayout.setSpacing(0)
        self._frameLayout.addWidget(self._colorSelectBt)
        self._frame.setMaximumHeight(
            self._colorSelectBt.minimumSizeHint().height() - 2)
        self._frame.setLayout(self._frameLayout)

        self._rootLayout.addWidget(self._frame)
        self._rootLayout.setContentsMargins(1, 1, 1, 1)
        self.setLayout(self._rootLayout)

        self._pull()

    def _updateWith(self, col):
        palette = self._colorSelectBt.palette()
        palette.setColor(QPalette.Button, col)
        self._colorSelectBt.setAutoFillBackground(True)
        self._colorSelectBt.setPalette(palette)
        self._colorSelectBt.update()
        self._colorLineEdit.setText("<{0}, {1}, {2}, {3}>".format(
            col.red(), col.green(), col.blue(), col.alpha()))

    def _signal_colorSelectBt_clicked(self):
        r, g, b, a = self._val.getVal()
        resColor = QColorDialog.getColor(QColor(r, g, b,
                                                a), self, "Select Color",
                                         QColorDialog.ShowAlphaChannel)
        if not resColor.isValid():
            return
        self._push(resColor)
        SendMessage(MsgOnLogicDataEdited(self._val))

    def _push(self, col):
        self._val.setVal(col.red(), col.green(), col.blue(), col.alpha())

    def _pull(self):
        r, g, b, a = self._val.getVal()
        self._updateWith(QColor(r, g, b, a))
Exemplo n.º 3
0
    def create_calculator(self):
        title_frame = QFrame()
        title_layout = QVBoxLayout()

        #calculator_label = QLabel("Calculate your body fat", self)
        #calculator_label.setFont(QFont("Ariel", 15))
        #calculator_label.setFixedHeight(70)

        #title_layout.addWidget(calculator_label)
        #title_frame.setLayout(title_layout)

        calculator_frame = QFrame()
        calculator_frame.setObjectName("frameObj")
        calculator_frame.setFrameStyle(QFrame.Box)
        calculator_frame.setLineWidth(3)
        calculator_frame.setStyleSheet("""#frameObj {color: #322d2d;}""")
        calculator_frame.setMaximumWidth(600)
        calculator_frame.setMaximumHeight(350)

        form_layout = self.create_form_metric(
        ) if self.units == "metric" else self.create_form_imperial()
        calculator_frame.setLayout(form_layout)

        wrapper_layout = QVBoxLayout()
        #wrapper_layout.addWidget(title_frame)
        wrapper_layout.addWidget(calculator_frame)
        return wrapper_layout
Exemplo n.º 4
0
class BookmarkWidget(QFrame):
    SPELL_TAB = 0
    DICE_TAB = 1

    def __init__(self, monster_table, monster_viewer, spell_table, spell_viewer):
        super().__init__()
        self.monster_table = monster_table
        self.spell_table = spell_table
        self.monster_viewer = monster_viewer
        self.spell_viewer = spell_viewer
        self.bookmark_frame = QFrame()
        self.bookmark_frame.setMaximumHeight(300)
        self.button_bar = QFrame()
        self.button_bar.setLayout(QHBoxLayout())
        bookmark_layout = QHBoxLayout()
        self.setLayout(QVBoxLayout())
        self.layout().setContentsMargins(0, 0, 0, 0)
        self.setSizePolicy(QSizePolicy(QSizePolicy.Minimum, QSizePolicy.Maximum))

        self.spell_bookmark = LinkedSpellTable(self.spell_table, self.spell_viewer)
        self.monster_bookmark = LinkedMonsterTable(self.monster_table, self.monster_viewer)
        self.monster_tabWidget = QTabWidget()
        self.monster_tabWidget.addTab(self.monster_bookmark, "Monster")

        self.spell_tabWidget = QTabWidget()
        self.spell_tabWidget.addTab(self.spell_bookmark, "Spell")

        self.dice_bookmark = QFrame()
        dice_layout = QVBoxLayout()
        for i in range(5):
            dice_layout.addWidget(DiceBox().frame)
        dice_help_button = QPushButton("Help")
        dice_help_button.clicked.connect(self.dice_instructions)
        dice_layout.addWidget(dice_help_button)
        self.dice_bookmark.setLayout(dice_layout)
        self.spell_tabWidget.addTab(self.dice_bookmark, "Dice")

        bookmark_layout.addWidget(self.monster_tabWidget)
        bookmark_layout.addWidget(self.spell_tabWidget)
        self.bookmark_frame.setLayout(bookmark_layout)

        self.clear_bookmark_button = QPushButton("Clear Bookmark")
        self.toggle_bookmark_button = QPushButton("Toggle Bookmark")
        self.button_bar.layout().setContentsMargins(0, 0, 0, 0)
        self.button_bar.layout().addWidget(self.clear_bookmark_button)
        self.button_bar.layout().addWidget(self.toggle_bookmark_button)

        self.layout().addWidget(self.bookmark_frame)
        self.layout().addWidget(self.button_bar)

        self.bookmark_frame.setHidden(True)
        self.hidden = True

    def dice_instructions(self):
        sNexus.printSignal.emit("\nEither input diceroll in format xdy+z, AttackBonus|DamageRoll, or"
                                    " AttackBonus, DamageRoll\nExample: 1d20+6\n5|2d6+3\n5, 2d6+3\n")
    def toggle_hide(self):
        self.hidden = not self.hidden
        self.bookmark_frame.setHidden(self.hidden)
Exemplo n.º 5
0
    def addAddStudentPage(self):
        layout = QVBoxLayout()
        frame = QFrame()

        name_label = QLabel("Name : ")
        name_label.setStyleSheet("color:#fff;padding:8px 0px;font-size:20px")
        mobile_label = QLabel("Mobile : ")
        mobile_label.setStyleSheet("color:#fff;padding:8px 0px;font-size:20px")
        vechicle_label = QLabel("Vehicle No : ")
        vechicle_label.setStyleSheet(
            "color:#fff;padding:8px 0px;font-size:20px")
        vechicle_type = QLabel("Vehicle Type : ")
        vechicle_type.setStyleSheet(
            "color:#fff;padding:8px 0px;font-size:20px")
        error_label = QLabel("")
        error_label.setStyleSheet("color:red;padding:8px 0px;font-size:20px")

        name_input = QLineEdit()
        name_input.setStyleSheet("color:#fff;padding:8px 0px;font-size:20px")
        mobile_input = QLineEdit()
        mobile_input.setStyleSheet("color:#fff;padding:8px 0px;font-size:20px")
        vehicle_input = QLineEdit()
        vehicle_input.setStyleSheet(
            "color:#fff;padding:8px 0px;font-size:20px")
        vtype = QComboBox()
        vtype.setStyleSheet(
            "color:#fff;padding:8px 0px;font-size:20px;border:1px solid white")
        vtype.addItem("2 Wheeler")
        vtype.addItem("4 Wheeler")

        button = QPushButton("Add Vehicle")
        button.setStyleSheet(
            "color:#fff;padding:8px 0px;font-size:20px;background:green;border:1px solid white"
        )

        layout.addWidget(name_label)
        layout.addWidget(name_input)
        layout.addWidget(mobile_label)
        layout.addWidget(mobile_input)
        layout.addWidget(vechicle_label)
        layout.addWidget(vehicle_input)
        layout.addWidget(vechicle_type)
        layout.addWidget(vtype)
        layout.addWidget(button)
        layout.addWidget(error_label)

        layout.setContentsMargins(0, 0, 0, 0)
        frame.setMinimumHeight(self.height())
        frame.setMinimumWidth(self.width())
        frame.setMaximumHeight(self.width())
        frame.setMaximumWidth(self.width())

        layout.addStretch()
        frame.setLayout(layout)
        button.clicked.connect(
            lambda: self.addVehicles(name_input.text(), vehicle_input.text(
            ), mobile_input.text(), vtype.currentIndex(), error_label))
        self.vertical_2.addWidget(frame)
Exemplo n.º 6
0
 def horizontalSpacer():
     spacer = QFrame()
     spacer.setFrameShape(QFrame.HLine)
     spacer.setMaximumHeight(1)
     spacer.setContentsMargins(0, 0, 0, 0)
     # spacer.setLineWidth(0)
     # spacer.setFrameShadow(QFrame.Sunken)
     spacer.setStyleSheet('color: #434858')
     return spacer
Exemplo n.º 7
0
    def addManagePage(self):
        data = self.dbOperation.getCurrentVehicle()
        self.table = QTableWidget()
        self.table.setStyleSheet("background:#fff")
        self.table.resize(self.width(), self.height())
        self.table.setRowCount(len(data))
        self.table.setColumnCount(7)

        self.table.horizontalHeader().setSectionResizeMode(
            QHeaderView.ResizeToContents)
        self.table.setHorizontalHeaderItem(0, QTableWidgetItem("ID"))
        self.table.setHorizontalHeaderItem(1, QTableWidgetItem("Name"))
        self.table.setHorizontalHeaderItem(2, QTableWidgetItem("VEHICLE No"))
        self.table.setHorizontalHeaderItem(3, QTableWidgetItem("MOBILE"))
        self.table.setHorizontalHeaderItem(4, QTableWidgetItem("VEHICLE TYPE"))
        self.table.setHorizontalHeaderItem(5, QTableWidgetItem("ENTRY TIME"))
        self.table.setHorizontalHeaderItem(6, QTableWidgetItem("ACTION"))

        loop = 0
        for smalldata in data:
            self.table.setItem(loop, 0, QTableWidgetItem(str(smalldata[0])))
            self.table.setItem(loop, 1, QTableWidgetItem(str(smalldata[1])))
            self.table.setItem(loop, 2, QTableWidgetItem(str(smalldata[6])))
            self.table.setItem(loop, 3, QTableWidgetItem(str(smalldata[2])))
            self.table.setItem(loop, 4, QTableWidgetItem(str(smalldata[7])))
            self.table.setItem(loop, 5, QTableWidgetItem(str(smalldata[3])))
            self.button_exit = QPushButton("Exit")
            self.button_exit.setStyleSheet(
                "color:#fff;padding:8px 0px;font-size:20px;background:green;border:1px solid white"
            )
            self.table.setCellWidget(loop, 6, self.button_exit)
            self.button_exit.clicked.connect(self.exitCall)
            loop = loop + 1

        frame = QFrame()
        layout = QVBoxLayout()
        button = QPushButton("Refresh")
        button.setStyleSheet(
            "color:#fff;padding:8px 0px;font-size:20px;background:green;border:1px solid white"
        )
        button.clicked.connect(self.refreshManage)
        layout.setContentsMargins(0, 0, 0, 0)
        layout.setSpacing(0)
        layout.addWidget(button)
        layout.addWidget(self.table)
        frame.setLayout(layout)
        frame.setContentsMargins(0, 0, 0, 0)
        frame.setMaximumWidth(self.width())
        frame.setMinimumWidth(self.width())
        frame.setMaximumHeight(self.height())
        frame.setMinimumHeight(self.height())
        self.vertical_3.addWidget(frame)
        self.vertical_3.addStretch()
Exemplo n.º 8
0
 def construct_innerframe(self, spacing: int) -> QFrame:
     parent_toolbar = tabtoolbar.find_tabtoolbar(self)
     if not parent_toolbar:
         raise Exception("Could not find Parent Tabtoolbar")
     group_maxheight = parent_toolbar.group_maxheight
     rowcount = parent_toolbar.rowcount()
     frame = QFrame(self)
     frame.setFrameShape(QFrame.NoFrame)
     frame.setLineWidth(0)
     frame.setContentsMargins(0, 0, 0, 0)
     policy = QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Preferred)
     policy.setHorizontalStretch(0)
     policy.setVerticalStretch(1)
     frame.setSizePolicy(policy)
     frame.setMaximumHeight(group_maxheight / rowcount)
     llayout = QHBoxLayout(frame)
     # layout.setMargin(0)
     llayout.setContentsMargins(0, 0, 0, 0)
     llayout.setSpacing(spacing)
     llayout.setDirection(QBoxLayout.LeftToRight)
     frame.setLayout(llayout)
     spacer = QSpacerItem(0, 0, QSizePolicy.Minimum, QSizePolicy.Expanding)
     llayout.addItem(spacer)
     return frame
Exemplo n.º 9
0
class ManagementPanel(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("Home")
        widget = QWidget()
        widget.setStyleSheet("background:#467f90")
        layout_horizontal = QHBoxLayout()
        menu_vertical_layout = QVBoxLayout()

        self.btn_home = QPushButton("Lot\nOverview")
        self.btn_add = QPushButton("Car\nRegistration")
        self.btn_manage = QPushButton("Manage\nMenu")

        menu_vertical_layout.setContentsMargins(0, 0, 0, 0)
        menu_vertical_layout.setSpacing(0)
        self.btn_home.setStyleSheet(
            "width:200px;height:160px;font-size:20px;background:blue;color:#fff;font-weight:bold;border:1px solid white"
        )
        self.btn_add.setStyleSheet(
            "width:200px;height:160px;font-size:20px;background:orange;color:#fff;font-weight:bold;border:1px solid white"
        )
        self.btn_manage.setStyleSheet(
            "width:200px;height:160px;font-size:20px;background:orange;color:#fff;font-weight:bold;border:1px solid white"
        )

        self.btn_home.clicked.connect(self.show_overview_menu)
        self.btn_add.clicked.connect(self.show_add_menu)
        self.btn_manage.clicked.connect(self.show_manage_menu)

        menu_frame = QFrame()
        menu_vertical_layout.addWidget(self.btn_home)
        menu_vertical_layout.addWidget(self.btn_add)
        menu_vertical_layout.addWidget(self.btn_manage)
        menu_vertical_layout.addStretch()
        menu_frame.setLayout(menu_vertical_layout)
        # menu_frame.setMinimumWidth(200)
        # menu_frame.setMaximumHeight(200)

        parent_vertical = QVBoxLayout()
        parent_vertical.setContentsMargins(0, 0, 0, 0)
        self.vertical_1 = QVBoxLayout()
        self.overview_menu()
        self.vertical_2 = QVBoxLayout()
        self.vertical_2.setContentsMargins(0, 0, 0, 0)
        self.add_menu()

        self.vertical_3 = QVBoxLayout()
        self.vertical_3.setContentsMargins(0, 0, 0, 0)
        self.manage_menu()

        self.frame_1 = QFrame()
        self.frame_1.setMinimumWidth(self.width())
        self.frame_1.setMaximumWidth(self.width())
        self.frame_1.setMinimumHeight(self.height())
        self.frame_1.setMaximumHeight(self.height())

        self.frame_1.setLayout(self.vertical_1)
        self.frame_2 = QFrame()
        self.frame_2.setLayout(self.vertical_2)
        self.frame_3 = QFrame()
        self.frame_3.setLayout(self.vertical_3)

        parent_vertical.addWidget(self.frame_1)
        parent_vertical.addWidget(self.frame_2)
        parent_vertical.addWidget(self.frame_3)

        layout_horizontal.addWidget(menu_frame)
        layout_horizontal.addLayout(parent_vertical)
        layout_horizontal.setContentsMargins(0, 0, 0, 0)
        parent_vertical.setContentsMargins(0, 0, 0, 0)
        parent_vertical.addStretch()
        # menu_vertical_layout.addStretch()
        layout_horizontal.addStretch()
        widget.setLayout(layout_horizontal)

        self.frame_1.show()
        self.frame_2.hide()
        self.frame_3.hide()

        self.setCentralWidget(widget)

    def show_add_menu(self):
        self.btn_home.setStyleSheet(
            "width:200px;height:160px;font-size:20px;background:orange;color:#fff;font-weight:bold;border:1px solid white"
        )
        self.btn_add.setStyleSheet(
            "width:200px;height:160px;font-size:20px;background:blue;color:#fff;font-weight:bold;border:1px solid white"
        )
        self.btn_manage.setStyleSheet(
            "width:200px;height:160px;font-size:20px;background:orange;color:#fff;font-weight:bold;border:1px solid white"
        )

        self.frame_1.hide()
        self.frame_3.hide()
        self.frame_2.show()

    def add_menu(self):
        layout = QVBoxLayout()
        frame = QFrame()

        license_plate_label = QLabel("License Plate: ")
        license_plate_label.setStyleSheet(
            "color:#fff;padding:8px 0px;font-size:20px"
        )
        brand_name_label = QLabel("Brand: ")
        brand_name_label.setStyleSheet(
            "color:#fff;margin-top:32px;padding:8px 0px;font-size:20px"
        )
        fuel_type_label = QLabel("Fuel: ")
        fuel_type_label.setStyleSheet(
            "color:#fff;margin-top:32px;padding:8px 0px;font-size:20px"
        )

        license_plate_input = QLineEdit()
        license_plate_input.setStyleSheet(
            "color:#fff;padding:8px 0px;font-size:20px"
        )
        brand_name_input = QLineEdit()
        brand_name_input.setStyleSheet(
            "color:#fff;padding:8px 0px;font-size:20px"
        )
        fuel_type_input = QComboBox()
        fuel_type_input.setStyleSheet(
            "color:#fff;padding:8px 0px;font-size:20px;border:1px solid white"
        )
        fuel_type_input.addItem("Gasoline")
        fuel_type_input.addItem("Diesel")
        fuel_type_input.addItem("Hydrogen")
        fuel_type_input.addItem("Electric")

        button = QPushButton("Check-in")
        button.setStyleSheet(
            "color:#fff;margin-top:32px;padding:8px 0px;font-size:20px;background:blue;border:1px solid white"
        )

        layout.addWidget(license_plate_label)
        layout.addWidget(license_plate_input)
        layout.addWidget(brand_name_label)
        layout.addWidget(brand_name_input)
        layout.addWidget(fuel_type_label)
        layout.addWidget(fuel_type_input)
        layout.addWidget(button)

        layout.setContentsMargins(0, 0, 0, 0)
        frame.setMinimumHeight(self.height())
        frame.setMinimumWidth(self.width())
        frame.setMaximumHeight(self.width())
        frame.setMaximumWidth(self.width())

        layout.addStretch()
        frame.setLayout(layout)
        button.clicked.connect(
            lambda: self.add_car_db(
                license_plate_input.text(),
                brand_name_input.text(),
                fuel_type_input.currentText(),
            )
        )
        self.vertical_2.addWidget(frame)

    def add_car_db(self, license_plate, brand_name, fuel_type):
        owner_id = None
        record_id = uuid1().bytes
        now = datetime.now()
        formatted_date = now.strftime("%Y-%m-%d %H:%M:%S")
        with DatabaseDAO("ticket_booth") as dao:
            space_id = dao.get_random_parking_space(fuel_type)[0]
            car_data = (license_plate, owner_id, brand_name, fuel_type)
            record_data = (record_id, license_plate, space_id, formatted_date)
            dao.register_new_car(car_data)
            dao.create_new_car_record(record_data)
            dao.occupy_parking_space(space_id)

    def show_manage_menu(self):
        self.btn_home.setStyleSheet(
            "width:200px;height:160px;font-size:20px;background:orange;color:#fff;font-weight:bold;border:1px solid white"
        )
        self.btn_add.setStyleSheet(
            "width:200px;height:160px;font-size:20px;background:orange;color:#fff;font-weight:bold;border:1px solid white"
        )
        self.btn_manage.setStyleSheet(
            "width:200px;height:160px;font-size:20px;background:blue;color:#fff;font-weight:bold;border:1px solid white"
        )

        self.frame_1.hide()
        self.frame_2.hide()
        self.frame_3.show()
        self.refresh_manage_menu()

    def manage_menu(self):
        self.table = QTableWidget()
        self.table.setStyleSheet("background:#fff")
        self.table.resize(self.width(), self.height())
        self.table.setColumnCount(7)

        self.table.horizontalHeader().setSectionResizeMode(
            QHeaderView.ResizeToContents
        )
        self.table.setHorizontalHeaderItem(0, QTableWidgetItem("License Plate"))
        self.table.setHorizontalHeaderItem(1, QTableWidgetItem("Car Brand"))
        self.table.setHorizontalHeaderItem(2, QTableWidgetItem("Owner Name"))
        self.table.setHorizontalHeaderItem(3, QTableWidgetItem("Space ID"))
        self.table.setHorizontalHeaderItem(4, QTableWidgetItem("Check-in time"))
        self.table.setHorizontalHeaderItem(5, QTableWidgetItem("Discount"))
        self.table.setHorizontalHeaderItem(6, QTableWidgetItem("ACTION"))

        self.refresh_manage_menu()

        frame = QFrame()
        layout = QVBoxLayout()
        layout.setContentsMargins(0, 0, 0, 0)
        layout.setSpacing(0)
        layout.addWidget(self.table)
        frame.setLayout(layout)
        frame.setContentsMargins(0, 0, 0, 0)
        frame.setMaximumWidth(self.width())
        frame.setMinimumWidth(self.width())
        frame.setMaximumHeight(self.height())
        frame.setMinimumHeight(self.height())
        self.vertical_3.addWidget(frame)
        self.vertical_3.addStretch()

    def refresh_manage_menu(self):
        with DatabaseDAO("ticket_booth") as dao:
            data = dao.get_currently_parked_cars(with_owner=True)
            self.table.setRowCount(len(data))
        for index, row in enumerate(data):
            self.table.setItem(index, 0, QTableWidgetItem(str(row[0])))
            self.table.setItem(index, 1, QTableWidgetItem(str(row[1])))
            if row[2] is not None:
                self.table.setItem(
                    index, 2, QTableWidgetItem(str(row[2]) + " " + str(row[3]))
                )
            else:
                self.table.setItem(index, 2, QTableWidgetItem("VISITOR"))
            self.table.setItem(index, 3, QTableWidgetItem(str(row[4])))
            self.table.setItem(index, 4, QTableWidgetItem(str(row[5])))
            self.discout_drop_down = QComboBox()
            if row[6] is not None:
                self.discout_drop_down.addItem(str(row[6]))
            else:
                self.discout_drop_down.addItem("0")
            self.discout_drop_down.addItem("10")
            self.discout_drop_down.addItem("15")
            self.discout_drop_down.addItem("20")
            self.discout_drop_down.addItem("25")
            self.discout_drop_down.addItem("30")
            self.table.setCellWidget(index, 5, self.discout_drop_down)
            self.button_check_out = QPushButton("Check-out")
            self.button_check_out.setStyleSheet(
                "color:#fff;padding:4px 0px;font-size:16px;background:green;border:1px solid white"
            )
            self.table.setCellWidget(index, 6, self.button_check_out)
            self.button_check_out.clicked.connect(self.check_out_call)

    def check_out_call(self):
        btn = self.sender()
        if btn:
            index = self.table.indexAt(btn.pos()).row()
            license_plate = str(self.table.item(index, 0).text())
            space_id = str(self.table.item(index, 3).text())
            new_discount = self.table.cellWidget(index, 5).currentText()
            check_out_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
            with DatabaseDAO("ticket_booth") as dao:
                dao.check_out_car(
                    license_plate, space_id, check_out_time, new_discount
                )
            self.table.removeRow(index)

    def show_overview_menu(self):
        self.btn_home.setStyleSheet(
            "width:200px;height:160px;font-size:20px;background:blue;color:#fff;font-weight:bold;border:1px solid white"
        )
        self.btn_add.setStyleSheet(
            "width:200px;height:160px;font-size:20px;background:orange;color:#fff;font-weight:bold;border:1px solid white"
        )
        self.btn_manage.setStyleSheet(
            "width:200px;height:160px;font-size:20px;background:orange;color:#fff;font-weight:bold;border:1px solid white"
        )

        self.frame_2.hide()
        self.frame_3.hide()
        self.frame_1.show()
        self.refresh_overview_menu()

    def overview_menu(self):
        self.vertical_1.setContentsMargins(0, 0, 0, 0)

        vertical_layout = QVBoxLayout()
        vertical_layout.setContentsMargins(0, 0, 0, 0)
        frame = QFrame()

        horizontal = QHBoxLayout()
        horizontal.setContentsMargins(0, 0, 0, 0)
        vertical_layout.addLayout(horizontal)

        self.gridLayout = QGridLayout()
        self.gridLayout.setContentsMargins(0, 0, 0, 0)
        self.gridLayout.setHorizontalSpacing(0)
        self.gridLayout.setVerticalSpacing(0)
        vertical_layout.addLayout(self.gridLayout)

        self.refresh_overview_menu()

        frame.setLayout(vertical_layout)
        self.vertical_1.addWidget(frame)
        self.vertical_1.addStretch()

    def refresh_overview_menu(self):
        while self.gridLayout.count():
            child = self.gridLayout.takeAt(0)
            if child.widget():
                child.widget().deleteLater()
        data = None
        with DatabaseDAO("ticket_booth") as dao:
            data = dao.get_parking_spaces()
        if data is not None:
            row = 0
            i = 0
            for parking_space in data:
                label = QPushButton("Space\n" + str(parking_space[0]))

                if parking_space[1] == 0:  # Not occupied.
                    if str(parking_space[2]) == "non_charging":
                        label.setStyleSheet(
                            "background-color:green;color:white;padding:5px;width:100px;height:100px;border:1px solid white;text-align:center;font-weight:bold"
                        )
                    else:
                        label.setStyleSheet(
                            "background-color:#a9c800;color:white;padding:5px;width:100px;height:100px;border:1px solid white;text-align:center;font-weight:bold"
                        )
                else:
                    label.setStyleSheet(
                        "background-color:red;color:white;padding:5px;width:100px;height:100px;border:1px solid white;text-align:center;font-weight:bold"
                    )

                if i % 5 == 0:
                    i = 0
                    row = row + 1

                self.gridLayout.addWidget(label, row, i)
                i = i + 1
Exemplo n.º 10
0
class HomeScreen(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("Home")
        self.dbOperation = DBOperation()
        widget = QWidget()
        widget.setStyleSheet("background:#000")
        layout_horizontal = QHBoxLayout()
        menu_vertical_layout = QVBoxLayout()

        self.btn_home = QPushButton("Home")
        self.btn_add = QPushButton("Add Vehicle")
        self.btn_manage = QPushButton("Manage Vehicle")
        self.btn_history = QPushButton("History")

        menu_vertical_layout.setContentsMargins(0, 0, 0, 0)
        menu_vertical_layout.setSpacing(0)
        self.btn_home.setStyleSheet(
            "width:200px;height:160px;font-size:20px;background:blue;color:#fff;font-weight:bold;border:1px solid white"
        )
        self.btn_add.setStyleSheet(
            "width:200px;height:160px;font-size:20px;background:orange;color:#fff;font-weight:bold;border:1px solid white"
        )
        self.btn_manage.setStyleSheet(
            "width:200px;height:160px;font-size:20px;background:orange;color:#fff;font-weight:bold;border:1px solid white"
        )
        self.btn_history.setStyleSheet(
            "width:200px;height:160px;font-size:20px;background:orange;color:#fff;font-weight:bold;border:1px solid white"
        )

        self.btn_home.clicked.connect(self.showHome)
        self.btn_add.clicked.connect(self.showAdd)
        self.btn_manage.clicked.connect(self.showManage)
        self.btn_history.clicked.connect(self.showHistory)

        menu_frame = QFrame()
        menu_vertical_layout.addWidget(self.btn_home)
        menu_vertical_layout.addWidget(self.btn_add)
        menu_vertical_layout.addWidget(self.btn_manage)
        menu_vertical_layout.addWidget(self.btn_history)
        menu_vertical_layout.addStretch()
        menu_frame.setLayout(menu_vertical_layout)
        #menu_frame.setMinimumWidth(200)
        #menu_frame.setMaximumHeight(200)

        parent_vertical = QVBoxLayout()
        parent_vertical.setContentsMargins(0, 0, 0, 0)
        self.vertical_1 = QVBoxLayout()
        self.addHomePageData()

        self.vertical_2 = QVBoxLayout()
        self.vertical_2.setContentsMargins(0, 0, 0, 0)
        self.addAddStudentPage()

        self.vertical_3 = QVBoxLayout()
        self.vertical_3.setContentsMargins(0, 0, 0, 0)
        self.addManagePage()

        self.vertical_4 = QVBoxLayout()
        self.addHistoryPage()

        self.frame_1 = QFrame()
        self.frame_1.setMinimumWidth(self.width())
        self.frame_1.setMaximumWidth(self.width())
        self.frame_1.setMaximumHeight(self.width())
        self.frame_1.setMaximumHeight(self.width())

        self.frame_1.setLayout(self.vertical_1)
        self.frame_2 = QFrame()
        self.frame_2.setLayout(self.vertical_2)
        self.frame_3 = QFrame()
        self.frame_3.setLayout(self.vertical_3)
        self.frame_4 = QFrame()
        self.frame_4.setLayout(self.vertical_4)

        parent_vertical.addWidget(self.frame_1)
        parent_vertical.addWidget(self.frame_2)
        parent_vertical.addWidget(self.frame_3)
        parent_vertical.addWidget(self.frame_4)

        layout_horizontal.addWidget(menu_frame)
        layout_horizontal.addLayout(parent_vertical)
        layout_horizontal.setContentsMargins(0, 0, 0, 0)
        parent_vertical.setContentsMargins(0, 0, 0, 0)
        parent_vertical.addStretch()
        #menu_vertical_layout.addStretch()
        layout_horizontal.addStretch()
        widget.setLayout(layout_horizontal)

        self.frame_1.show()
        self.frame_2.hide()
        self.frame_3.hide()
        self.frame_4.hide()

        self.setCentralWidget(widget)

    def showHistory(self):
        self.btn_home.setStyleSheet(
            "width:200px;height:160px;font-size:20px;background:orange;color:#fff;font-weight:bold;border:1px solid white"
        )
        self.btn_add.setStyleSheet(
            "width:200px;height:160px;font-size:20px;background:orange;color:#fff;font-weight:bold;border:1px solid white"
        )
        self.btn_manage.setStyleSheet(
            "width:200px;height:160px;font-size:20px;background:orange;color:#fff;font-weight:bold;border:1px solid white"
        )
        self.btn_history.setStyleSheet(
            "width:200px;height:160px;font-size:20px;background:blue;color:#fff;font-weight:bold;border:1px solid white"
        )

        self.frame_1.hide()
        self.frame_2.hide()
        self.frame_3.hide()
        self.frame_4.show()

    def showManage(self):
        self.btn_home.setStyleSheet(
            "width:200px;height:160px;font-size:20px;background:orange;color:#fff;font-weight:bold;border:1px solid white"
        )
        self.btn_add.setStyleSheet(
            "width:200px;height:160px;font-size:20px;background:orange;color:#fff;font-weight:bold;border:1px solid white"
        )
        self.btn_manage.setStyleSheet(
            "width:200px;height:160px;font-size:20px;background:blue;color:#fff;font-weight:bold;border:1px solid white"
        )
        self.btn_history.setStyleSheet(
            "width:200px;height:160px;font-size:20px;background:orange;color:#fff;font-weight:bold;border:1px solid white"
        )

        self.frame_1.hide()
        self.frame_2.hide()
        self.frame_4.hide()
        self.frame_3.show()

    def showAdd(self):
        self.btn_home.setStyleSheet(
            "width:200px;height:160px;font-size:20px;background:orange;color:#fff;font-weight:bold;border:1px solid white"
        )
        self.btn_add.setStyleSheet(
            "width:200px;height:160px;font-size:20px;background:blue;color:#fff;font-weight:bold;border:1px solid white"
        )
        self.btn_manage.setStyleSheet(
            "width:200px;height:160px;font-size:20px;background:orange;color:#fff;font-weight:bold;border:1px solid white"
        )
        self.btn_history.setStyleSheet(
            "width:200px;height:160px;font-size:20px;background:orange;color:#fff;font-weight:bold;border:1px solid white"
        )

        self.frame_1.hide()
        self.frame_3.hide()
        self.frame_4.hide()
        self.frame_2.show()

    def showHome(self):
        self.btn_home.setStyleSheet(
            "width:200px;height:160px;font-size:20px;background:blue;color:#fff;font-weight:bold;border:1px solid white"
        )
        self.btn_add.setStyleSheet(
            "width:200px;height:160px;font-size:20px;background:orange;color:#fff;font-weight:bold;border:1px solid white"
        )
        self.btn_manage.setStyleSheet(
            "width:200px;height:160px;font-size:20px;background:orange;color:#fff;font-weight:bold;border:1px solid white"
        )
        self.btn_history.setStyleSheet(
            "width:200px;height:160px;font-size:20px;background:orange;color:#fff;font-weight:bold;border:1px solid white"
        )

        self.frame_2.hide()
        self.frame_3.hide()
        self.frame_4.hide()
        self.frame_1.show()

    def refreshHome(self):
        while self.gridLayout.count():
            child = self.gridLayout.takeAt(0)
            if child.widget():
                child.widget().deleteLater()
        row = 0
        i = 0
        alldata = self.dbOperation.getSlotSpace()
        for data in alldata:
            label = QPushButton("Slot " + str(data[0]) + " \n " + str(data[1]))

            if data[3] == 1:
                label.setStyleSheet(
                    "background-color:green;color:white;padding:5px;width:100px;height:100px;border:1px solid white;text-align:center;font-weight:bold"
                )
            else:
                label.setStyleSheet(
                    "background-color:red;color:white;padding:5px;width:100px;height:100px;border:1px solid white;text-align:center;font-weight:bold"
                )

            if i % 5 == 0:
                i = 0
                row = row + 1

            self.gridLayout.addWidget(label, row, i)
            i = i + 1

    def addHomePageData(self):
        self.vertical_1.setContentsMargins(0, 0, 0, 0)
        button = QPushButton("Refresh")

        button.clicked.connect(self.refreshHome)
        vertical_layout = QVBoxLayout()
        vertical_layout.setContentsMargins(0, 0, 0, 0)
        frame = QFrame()

        horizontal = QHBoxLayout()
        horizontal.setContentsMargins(0, 0, 0, 0)
        vertical_layout.addLayout(horizontal)

        alldata = self.dbOperation.getSlotSpace()
        self.gridLayout = QGridLayout()
        self.gridLayout.setContentsMargins(0, 0, 0, 0)
        self.gridLayout.setHorizontalSpacing(0)
        self.gridLayout.setVerticalSpacing(0)
        vertical_layout.addWidget(button)
        vertical_layout.addLayout(self.gridLayout)

        row = 0
        i = 0
        for data in alldata:
            label = QPushButton("Slot " + str(data[0]) + " \n " + str(data[1]))

            if data[3] == 1:
                label.setStyleSheet(
                    "background-color:green;color:white;padding:5px;width:100px;height:100px;border:1px solid white;text-align:center;font-weight:bold"
                )
            else:
                label.setStyleSheet(
                    "background-color:red;color:white;padding:5px;width:100px;height:100px;border:1px solid white;text-align:center;font-weight:bold"
                )

            if i % 5 == 0:
                i = 0
                row = row + 1

            self.gridLayout.addWidget(label, row, i)
            i = i + 1

        frame.setLayout(vertical_layout)
        self.vertical_1.addWidget(frame)
        self.vertical_1.addStretch()

    def addAddStudentPage(self):
        layout = QVBoxLayout()
        frame = QFrame()

        name_label = QLabel("Name : ")
        name_label.setStyleSheet("color:#fff;padding:8px 0px;font-size:20px")
        mobile_label = QLabel("Mobile : ")
        mobile_label.setStyleSheet("color:#fff;padding:8px 0px;font-size:20px")
        vechicle_label = QLabel("Vehicle No : ")
        vechicle_label.setStyleSheet(
            "color:#fff;padding:8px 0px;font-size:20px")
        vechicle_type = QLabel("Vehicle Type : ")
        vechicle_type.setStyleSheet(
            "color:#fff;padding:8px 0px;font-size:20px")
        error_label = QLabel("")
        error_label.setStyleSheet("color:red;padding:8px 0px;font-size:20px")

        name_input = QLineEdit()
        name_input.setStyleSheet("color:#fff;padding:8px 0px;font-size:20px")
        mobile_input = QLineEdit()
        mobile_input.setStyleSheet("color:#fff;padding:8px 0px;font-size:20px")
        vehicle_input = QLineEdit()
        vehicle_input.setStyleSheet(
            "color:#fff;padding:8px 0px;font-size:20px")
        vtype = QComboBox()
        vtype.setStyleSheet(
            "color:#fff;padding:8px 0px;font-size:20px;border:1px solid white")
        vtype.addItem("2 Wheeler")
        vtype.addItem("4 Wheeler")

        button = QPushButton("Add Vehicle")
        button.setStyleSheet(
            "color:#fff;padding:8px 0px;font-size:20px;background:green;border:1px solid white"
        )

        layout.addWidget(name_label)
        layout.addWidget(name_input)
        layout.addWidget(mobile_label)
        layout.addWidget(mobile_input)
        layout.addWidget(vechicle_label)
        layout.addWidget(vehicle_input)
        layout.addWidget(vechicle_type)
        layout.addWidget(vtype)
        layout.addWidget(button)
        layout.addWidget(error_label)

        layout.setContentsMargins(0, 0, 0, 0)
        frame.setMinimumHeight(self.height())
        frame.setMinimumWidth(self.width())
        frame.setMaximumHeight(self.width())
        frame.setMaximumWidth(self.width())

        layout.addStretch()
        frame.setLayout(layout)
        button.clicked.connect(
            lambda: self.addVehicles(name_input.text(), vehicle_input.text(
            ), mobile_input.text(), vtype.currentIndex(), error_label))
        self.vertical_2.addWidget(frame)

    def addVehicles(self, name, vehicleno, mobile, index, error_label):
        vtp = 2
        if index == 0:
            vtp = 2
        else:
            vtp = 4

        data = self.dbOperation.AddVehicles(name, vehicleno, mobile, str(vtp))
        if data == True:
            error_label.setText("Added Successfully")
        elif data == False:
            error_label.setText("Failed to Add Vehicle")
        else:
            error_label.setText(str(data))

    def addManagePage(self):
        data = self.dbOperation.getCurrentVehicle()
        self.table = QTableWidget()
        self.table.setStyleSheet("background:#fff")
        self.table.resize(self.width(), self.height())
        self.table.setRowCount(len(data))
        self.table.setColumnCount(7)

        self.table.horizontalHeader().setSectionResizeMode(
            QHeaderView.ResizeToContents)
        self.table.setHorizontalHeaderItem(0, QTableWidgetItem("ID"))
        self.table.setHorizontalHeaderItem(1, QTableWidgetItem("Name"))
        self.table.setHorizontalHeaderItem(2, QTableWidgetItem("VEHICLE No"))
        self.table.setHorizontalHeaderItem(3, QTableWidgetItem("MOBILE"))
        self.table.setHorizontalHeaderItem(4, QTableWidgetItem("VEHICLE TYPE"))
        self.table.setHorizontalHeaderItem(5, QTableWidgetItem("ENTRY TIME"))
        self.table.setHorizontalHeaderItem(6, QTableWidgetItem("ACTION"))

        loop = 0
        for smalldata in data:
            self.table.setItem(loop, 0, QTableWidgetItem(str(smalldata[0])))
            self.table.setItem(loop, 1, QTableWidgetItem(str(smalldata[1])))
            self.table.setItem(loop, 2, QTableWidgetItem(str(smalldata[6])))
            self.table.setItem(loop, 3, QTableWidgetItem(str(smalldata[2])))
            self.table.setItem(loop, 4, QTableWidgetItem(str(smalldata[7])))
            self.table.setItem(loop, 5, QTableWidgetItem(str(smalldata[3])))
            self.button_exit = QPushButton("Exit")
            self.button_exit.setStyleSheet(
                "color:#fff;padding:8px 0px;font-size:20px;background:green;border:1px solid white"
            )
            self.table.setCellWidget(loop, 6, self.button_exit)
            self.button_exit.clicked.connect(self.exitCall)
            loop = loop + 1

        frame = QFrame()
        layout = QVBoxLayout()
        button = QPushButton("Refresh")
        button.setStyleSheet(
            "color:#fff;padding:8px 0px;font-size:20px;background:green;border:1px solid white"
        )
        button.clicked.connect(self.refreshManage)
        layout.setContentsMargins(0, 0, 0, 0)
        layout.setSpacing(0)
        layout.addWidget(button)
        layout.addWidget(self.table)
        frame.setLayout(layout)
        frame.setContentsMargins(0, 0, 0, 0)
        frame.setMaximumWidth(self.width())
        frame.setMinimumWidth(self.width())
        frame.setMaximumHeight(self.height())
        frame.setMinimumHeight(self.height())
        self.vertical_3.addWidget(frame)
        self.vertical_3.addStretch()

    def refreshManage(self):
        data = self.dbOperation.getCurrentVehicle()
        self.table.setRowCount(len(data))
        self.table.setColumnCount(7)
        loop = 0
        for smalldata in data:
            self.table.setItem(loop, 0, QTableWidgetItem(str(smalldata[0])))
            self.table.setItem(loop, 1, QTableWidgetItem(str(smalldata[1])))
            self.table.setItem(loop, 2, QTableWidgetItem(str(smalldata[6])))
            self.table.setItem(loop, 3, QTableWidgetItem(str(smalldata[2])))
            self.table.setItem(loop, 4, QTableWidgetItem(str(smalldata[7])))
            self.table.setItem(loop, 5, QTableWidgetItem(str(smalldata[3])))
            self.button_exit = QPushButton("Exit")
            self.table.setCellWidget(loop, 6, self.button_exit)
            self.button_exit.clicked.connect(self.exitCall)
            loop = loop + 1

    def refreshHistory(self):
        self.table1.clearContents()
        data = self.dbOperation.getAllVehicle()
        loop = 0
        self.table1.setRowCount(len(data))
        self.table1.setColumnCount(7)
        for smalldata in data:
            self.table1.setItem(loop, 0, QTableWidgetItem(str(smalldata[0])))
            self.table1.setItem(loop, 1, QTableWidgetItem(str(smalldata[1])))
            self.table1.setItem(loop, 2, QTableWidgetItem(str(smalldata[6])))
            self.table1.setItem(loop, 3, QTableWidgetItem(str(smalldata[2])))
            self.table1.setItem(loop, 4, QTableWidgetItem(str(smalldata[7])))
            self.table1.setItem(loop, 5, QTableWidgetItem(str(smalldata[3])))
            self.table1.setItem(loop, 6, QTableWidgetItem(str(smalldata[4])))
            loop = loop + 1

    def addHistoryPage(self):
        data = self.dbOperation.getAllVehicle()
        self.table1 = QTableWidget()
        self.table1.resize(self.width(), self.height())
        self.table1.setRowCount(len(data))
        self.table1.setStyleSheet("background:#fff")
        self.table1.setColumnCount(7)

        button = QPushButton("Refresh")
        button.setStyleSheet(
            "color:#fff;padding:8px 0px;font-size:20px;background:green;border:1px solid white"
        )
        button.clicked.connect(self.refreshHistory)

        self.table1.horizontalHeader().setSectionResizeMode(
            QHeaderView.ResizeToContents)
        self.table1.setHorizontalHeaderItem(0, QTableWidgetItem("ID"))
        self.table1.setHorizontalHeaderItem(1, QTableWidgetItem("Name"))
        self.table1.setHorizontalHeaderItem(2, QTableWidgetItem("VEHICLE No"))
        self.table1.setHorizontalHeaderItem(3, QTableWidgetItem("MOBILE"))
        self.table1.setHorizontalHeaderItem(4,
                                            QTableWidgetItem("VEHICLE TYPE"))
        self.table1.setHorizontalHeaderItem(5, QTableWidgetItem("ENTRY TIME"))
        self.table1.setHorizontalHeaderItem(6, QTableWidgetItem("EXIT TIME"))

        loop = 0
        for smalldata in data:
            self.table1.setItem(loop, 0, QTableWidgetItem(str(smalldata[0])))
            self.table1.setItem(loop, 1, QTableWidgetItem(str(smalldata[1])))
            self.table1.setItem(loop, 2, QTableWidgetItem(str(smalldata[6])))
            self.table1.setItem(loop, 3, QTableWidgetItem(str(smalldata[2])))
            self.table1.setItem(loop, 4, QTableWidgetItem(str(smalldata[7])))
            self.table1.setItem(loop, 5, QTableWidgetItem(str(smalldata[3])))
            self.table1.setItem(loop, 6, QTableWidgetItem(str(smalldata[4])))
            loop = loop + 1

        self.frame5 = QFrame()
        self.layout1 = QVBoxLayout()
        self.layout1.setContentsMargins(0, 0, 0, 0)
        self.layout1.setSpacing(0)
        self.layout1.addWidget(button)
        self.layout1.addWidget(self.table1)
        self.frame5.setLayout(self.layout1)
        self.frame5.setContentsMargins(0, 0, 0, 0)
        self.frame5.setMaximumWidth(self.width())
        self.frame5.setMinimumWidth(self.width())
        self.frame5.setMaximumHeight(self.height())
        self.frame5.setMinimumHeight(self.height())
        self.vertical_4.addWidget(self.frame5)
        self.vertical_4.addStretch()

    def exitCall(self):
        btton = self.sender()
        if btton:
            row = self.table.indexAt(btton.pos()).row()
            id = str(self.table.item(row, 0).text())
            self.dbOperation.exitVehicle(id)
            self.table.removeRow(row)
Exemplo n.º 11
0
class WindowFrame(QDialog):
    def __init__(self):
        super(WindowFrame, self).__init__()
        self.closed = False
        self.maxNormal = False
        self.resize(840, 480)
        self.setMouseTracking(True)

        self.base_path = os.path.dirname(__file__)

        QDir.setCurrent(os.path.dirname(self.base_path))

        #self.setWindowFlags(Qt.FramelessWindowHint)
        self.setWindowFlags(Qt.SplashScreen)
        #self.setWindowFlags(Qt.FramelessWindowHint|Qt.WindowStaysOnTopHint)
        #self.setStyleSheet("border : none; background-color : rgba(250,100,100,0)")
        #self.setAutoFillBackground(True)
        #self.setAttribute(Qt.WA_TranslucentBackground)

        self.mainLayout = QVBoxLayout()
        self.mainLayout.setContentsMargins(0, 0, 0, 0)
        self.mainLayout.setSpacing(0)

        #Title Bar
        self.area = ComboBox()
        self.area.setSizePolicy(
            QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed))
        self.area.setMaximumWidth(32)
        #self.area.setMinimumWidth(32)
        #self.area.setMinimumHeight(28)

        self.area.addItem(QIcon(icon_path("ICON_ACTION")), "Prefs")
        self.area.addItem(QIcon(icon_path("ICON_GROUP")), "Library")
        self.area.addItem(QIcon(icon_path("ICON_MATERIAL")), "Assets")

        self.titleBarArea = QFrame()
        #self.titleBarArea.setCursor(Qt.OpenHandCursor)
        self.titleBarLayout = QHBoxLayout()
        self.titleBarLayout.setContentsMargins(4, 2, 4, 2)
        self.titleBarArea.setStyleSheet("""
                            border : none; background-color : rgb(100,100,100);
                            border-top-left-radius: 5px;border-top-right-radius: 5px;
                            border-style: solid;
                            border-color: rgb(50, 50, 50);
                            border-bottom-width: 1px;""")

        self.titleBarArea.setMinimumHeight(30)
        self.titleBarArea.setMaximumHeight(30)

        self.title = Label('Lib Manager')

        self.toolBox = QFrame()
        self.toolBox.setStyleSheet("""
                        border : none; background-color : rgb(120,120,120);
                        border-top-left-radius: 0px;border-top-right-radius: 0px;
                        border-bottom-left-radius: 5px;border-bottom-right-radius: 5px;"""
                                   )
        self.toolBoxLayout = QHBoxLayout()
        self.toolBoxLayout.setContentsMargins(12, 0, 4, 0)
        self.toolBox.setLayout(self.toolBoxLayout)

        self.btn_add_asset = PushButton(icon=icon_path("ICON_ZOOMIN"),
                                        size=[22, 22])
        self.btn_settings = PushButton(icon=icon_path("ICON_SETTINGS"),
                                       size=[22, 22])

        self.toolBoxLayout.addWidget(self.btn_add_asset)
        self.toolBoxLayout.addWidget(self.btn_settings)

        self.horizontalSpacer = QSpacerItem(40, 20, QSizePolicy.Expanding,
                                            QSizePolicy.Minimum)
        self.hSpacer = QSpacerItem(30, 20, QSizePolicy.Maximum,
                                   QSizePolicy.Minimum)

        self.btn_minimize = PushButton(icon=icon_path("ICON_MINIMIZE"),
                                       size=[22, 22])
        self.btn_minimize.clicked.connect(self.showSmall)

        self.btn_maximize = PushButton(icon=icon_path("ICON_MAXIMIZE"),
                                       size=[22, 22])
        self.btn_maximize.clicked.connect(self.showMaxRestore)

        self.btn_close = PushButton(icon=icon_path("ICON_CLOSE"),
                                    size=[22, 22])
        self.btn_close.clicked.connect(self.close)

        self.titleBarLayout.addWidget(self.area)
        self.titleBarLayout.addWidget(self.title)
        self.titleBarLayout.addItem(self.horizontalSpacer)
        self.titleBarLayout.addWidget(self.toolBox)
        self.titleBarLayout.addItem(self.hSpacer)
        self.titleBarLayout.addWidget(self.btn_minimize)
        self.titleBarLayout.addWidget(self.btn_maximize)
        self.titleBarLayout.addWidget(self.btn_close)

        self.titleBarArea.setLayout(self.titleBarLayout)

        self.middleLayout = QHBoxLayout()

        self.handleList = [self.titleBarArea]
        #Left Bar
        self.leftBarLayout = QVBoxLayout()
        self.leftHandle = QFrame()
        self.leftHandle.setStyleSheet(
            "border : none; background-color : rgb(110,110,110);")
        self.leftHandle.setMaximumWidth(5)
        self.leftHandle.setMinimumWidth(5)
        self.leftHandle.setCursor(Qt.SizeHorCursor)

        self.leftBottomHandle = QFrame()
        self.leftBottomHandle.setStyleSheet(
            "border : none; background-color : rgb(110,110,110);")
        self.leftBottomHandle.setMaximumSize(5, 16)
        self.leftBottomHandle.setCursor(Qt.SizeBDiagCursor)

        #Add handle to a list
        self.handleList += [self.leftHandle, self.leftBottomHandle]

        self.leftBarLayout.addWidget(self.leftHandle)
        self.leftBarLayout.addWidget(self.leftBottomHandle)

        #Content
        #self.content = QFrame()
        self.contentLayout = QVBoxLayout()
        self.contentLayout.setContentsMargins(0, 0, 0, 0)
        self.contentLayout.setSpacing(0)
        #self.content.setLayout(self.contentLayout)

        #Right Bar
        self.rightBarLayout = QVBoxLayout()
        self.rightHandle = QFrame()
        self.rightHandle.setStyleSheet(
            "border : none; background-color : rgb(110,110,110);")
        self.rightHandle.setMaximumWidth(5)
        self.rightHandle.setMinimumWidth(5)
        self.rightHandle.setCursor(Qt.SizeHorCursor)

        self.rightBottomHandle = QFrame()
        self.rightBottomHandle.setStyleSheet(
            "border : none; background-color : rgb(110,110,110);")
        self.rightBottomHandle.setMaximumSize(5, 16)
        self.rightBottomHandle.setCursor(Qt.SizeFDiagCursor)

        self.rightBarLayout.addWidget(self.rightHandle)
        self.rightBarLayout.addWidget(self.rightBottomHandle)

        #Add handle to a list
        self.handleList += [self.rightHandle, self.rightBottomHandle]

        self.middleLayout.addLayout(self.leftBarLayout)
        self.middleLayout.addLayout(self.contentLayout)
        self.middleLayout.addLayout(self.rightBarLayout)

        self.bottomLayout = QHBoxLayout()

        self.bottomLeftHandle = QFrame()
        self.bottomLeftHandle.setStyleSheet(
            "border : none; background-color : rgb(110,110,110);")
        self.bottomLeftHandle.setMaximumSize(16, 5)
        self.bottomLeftHandle.setCursor(Qt.SizeBDiagCursor)

        self.bottomHandle = QFrame()
        self.bottomHandle.setStyleSheet(
            "border : none; background-color : rgb(110,110,110);")
        self.bottomHandle.setMaximumHeight(5)
        self.bottomHandle.setMinimumHeight(5)
        self.bottomHandle.setCursor(Qt.SizeVerCursor)

        self.bottomRightHandle = QFrame()
        self.bottomRightHandle.setStyleSheet(
            "border : none; background-color : rgb(110,110,110);")
        self.bottomRightHandle.setMaximumSize(16, 5)
        self.bottomRightHandle.setCursor(Qt.SizeFDiagCursor)

        self.bottomLayout.addWidget(self.bottomLeftHandle)
        self.bottomLayout.addWidget(self.bottomHandle)
        self.bottomLayout.addWidget(self.bottomRightHandle)

        #Add handle to a list
        self.handleList += [
            self.bottomHandle, self.bottomLeftHandle, self.bottomRightHandle
        ]

        self.lowLayout = QVBoxLayout()
        self.lowLayout.addLayout(self.middleLayout)
        self.lowLayout.addLayout(self.bottomLayout)

        self.mainLayout.addWidget(self.titleBarArea)
        self.mainLayout.addLayout(self.lowLayout)

        ##Shadow
        self.shadow = QGraphicsDropShadowEffect()
        self.shadow.setColor(QColor(50, 50, 50, 200))
        self.shadow.setXOffset(5)
        self.shadow.setYOffset(5)
        self.shadow.setBlurRadius(8)
        self.setGraphicsEffect(self.shadow)
        #self.shadow.setEnabled(False)

        self.setLayout(self.mainLayout)

    def setContent(self, content):
        self.contentLayout.addWidget(content)

    def showSmall(self):
        self.showMinimized()

    def showMaxRestore(self):
        if (self.maxNormal):
            self.showNormal()
            self.maxNormal = False
            self.btn_maximize.setIcon(QIcon(icon_path("ICON_MAXIMIZE")))

        else:
            self.showMaximized()
            self.maxNormal = True
            self.btn_maximize.setIcon(QIcon(icon_path("ICON_MAXIMIZE_2")))

    def mousePressEvent(self, event):
        if event.button() == Qt.LeftButton and QApplication.widgetAt(
                event.globalPos()) in self.handleList:
            #print(QApplication.widgetAt(event.globalPos()))
            self.moving = True
            self.pos_x = event.pos().x()
            self.pos_y = event.pos().y()
            self.pos = event.pos()

    def mouseMoveEvent(self, event):

        x_offset = event.pos().x() - self.pos_x
        y_offset = event.pos().y() - self.pos_y

        if self.moving:
            if self.rightHandle.underMouse():
                self.resize(self.frameGeometry().width() + x_offset,
                            self.frameGeometry().height())
                self.pos_x += x_offset

            if self.leftHandle.underMouse():
                self.move(event.globalPos().x() - self.pos_x,
                          self.frameGeometry().y())
                self.resize(self.frameGeometry().width() - x_offset,
                            self.frameGeometry().height())

            if self.bottomHandle.underMouse():
                self.resize(self.frameGeometry().width(),
                            self.frameGeometry().height() + y_offset)
                self.pos_y += y_offset

            if self.titleBarArea.underMouse():
                self.move(event.globalPos() - self.pos)

            if self.rightBottomHandle.underMouse(
            ) or self.bottomRightHandle.underMouse():
                self.resize(self.frameGeometry().width() + x_offset,
                            self.frameGeometry().height() + y_offset)
                self.pos_x += x_offset
                self.pos_y += y_offset

            if self.leftBottomHandle.underMouse(
            ) or self.bottomLeftHandle.underMouse():
                self.move(event.globalPos().x() - self.pos_x,
                          self.frameGeometry().y())
                self.resize(self.frameGeometry().width() - x_offset,
                            self.frameGeometry().height() + y_offset)
                #self.pos_x += x_offset
                self.pos_y += y_offset

    def close(self):
        self.closed = True
        self.deleteLater()
Exemplo n.º 12
0
    def loadDesignItem(self, sku_code):
        self.lblSkuName.setText(sku_code)
        des = mysql_db.designInfo(self, sku_code)
        
        #self.vBox = QVBoxLayout()
        self.winGrid = QGridLayout()
        
        if not des:
            lblOpps = QLabel("""We could put a .png or something here, something better than text, to let the CSR's know that 
                             they searched an empty string or that the design they were looking for does not exist or that 
                             they mistyped what they were looking for.""", self)
            self.grid.addWidget(lblOpps)
            CSRWidgets.changeCentralWidget(self, self.vBox)

        self.currentInfo = {}
        for i in des:
            CSRWidgets.item = QListWidgetItem()
            CSRWidgets.item.setText(str(i[7]))         
            self.currentInfo[i[7]] = (str(i[7]),str(i[8]),str(i[3]),str(i[9]),str(i[10]),str(i[11]),str(i[1]))
        smImage = self.currentInfo['T-Shirts'][3]

        hBox = QHBoxLayout()
        
        pix = QLabel()
        smImg = QPixmap("//wampserver/"+ smImage)
        myScaledPixmap = smImg.scaled(125,125, Qt.KeepAspectRatio)
        pix.setPixmap(myScaledPixmap)

        hBox.addWidget(pix)
       
        icons = {}
        for i in des:
            icons[(i)] = QToolButton(self)
            icons[(i)].setIcon(QIcon("//wampserver/" + str(i[10])))
            icons[(i)].setIconSize(QSize(44, 44))
            icons[(i)].setAutoRaise(True)
            icons[(i)].setToolButtonStyle(Qt.ToolButtonTextUnderIcon)
            #icons[(i)].setStyleSheet("background-color: rgb(255, 255, 255);")
            icons[(i)].setFont(QFont("Helvetica",8))
            #icons[(i)].setObjectName(str(i[7]))
            icons[(i)].setText(str(i[7]) + '\n' + str(i[3]))
            icons[(i)].uniqueId = str(i[7])
            icons[(i)].clicked.connect(self.itemClicked_Click)
            hBox.addWidget(icons[(i)])
        
        hBox.addStretch(1)
        
        hFrame = QFrame()
        hFrame.setLayout(hBox)
        hFrame.setMaximumHeight(200)
        hFrame.setStyleSheet("background-color: rgb(255, 255, 255);") 
        
        #Create table to hold and display details of order order as they are selected from the tree. 
        CSRWidgets.tblOrderDetails = QTableWidget(7, 0)
        CSRWidgets.tblOrderDetails.hide()
        #CSRWidgets.tblOrderDetails.setMaximumHeight(250)

        
        self.winGrid.addWidget(hFrame, 0, 0, 2, 2)
        #self.vBox.addWidget(hFrame)
        #self.vBox.addWidget(CSRWidgets.tblOrderDetails)
        self.winGrid.addWidget(CSRWidgets.tblOrderDetails, 2, 0, 1, 1)
        #self.winGrid.addWidget(CSRWidgets.totalBox, 2, 1, 1, 1)       
        #self.vBox.addStretch(1)

        CSRWidgets.changeCentralWidget(self, self.winGrid)
        
        CSRWidgets.updateOrderDetails(self)
        
        CSRWidgets.getCustomerName(self, sku_code)
Exemplo n.º 13
0
class MainWindow(QWidget):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.folder = settings.ROOT

        self.widget_close = None
        self.context = None

        self.base_path = os.path.dirname(__file__)
        #self.folder = folder

        QDir.setCurrent(self.base_path)

        #self.setWindowTitle('Data Library')
        #self.resize(840, 480)

        self.color_background = '#404040'
        self.color_text_field = '#A7A7A7'
        self.color_button = '#979797'
        self.color_panel_bright = '#727272'
        self.color_panel_dark = '#525252'
        self.color_border = '#2E2E2E'

        self.setUI()

        #self.style_button = "border-color: %s;background-color:%s;"%(self.color_border,self.color_button)

    def setUI(self):
        #QApplication.setStyle(QStyleFactory.create('Cleanlooks'))
        self.mainLayout = QVBoxLayout()
        self.mainLayout.setContentsMargins(0, 0, 0, 0)
        self.mainLayout.setSpacing(0)
        self.setStyleSheet(get_css("MainWindow"))

        #top Bar
        self.topBarArea = QFrame()
        self.topBarArea.setSizePolicy(
            QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred))
        self.topBarArea.setMinimumHeight(32)
        self.topBarArea.setMaximumHeight(32)

        self.topBarLayout = QHBoxLayout()
        self.topBarLayout.setSpacing(2)
        self.topBarLayout.setContentsMargins(4, 1, 4, 1)

        self.topBarArea.setLayout(self.topBarLayout)
        self.topBarArea.setStyleSheet(get_css('Bar'))

        #Left Panel
        self.leftPanel = QFrame()
        #self.leftPanel.setMaximumWidth(132)

        self.leftPanel.setStyleSheet(get_css('PanelLeft'))

        self.leftPanelLayout = QVBoxLayout()
        self.leftPanelLayout.setContentsMargins(0, 0, 0, 0)
        self.leftPanel.setLayout(self.leftPanelLayout)

        self.outlinerLayout = QVBoxLayout()
        self.outlinerLayout.setContentsMargins(1, 5, 1, 1)

        self.assetChoiceLayout = QVBoxLayout()
        self.assetChoiceLayout.setContentsMargins(0, 0, 0, 0)

        self.treeWidget = TreeWidget()
        self.treeWidget.itemClicked.connect(self.onClickItem)

        # comboBox asset cbox_asset_choice
        self.cbox_asset_choice = ComboBox()
        self.cbox_asset_choice.setMinimumHeight(28)

        self.cbox_asset_choice.setStyleSheet(get_css("ComboBoxAsset"))

        #self.cbox_asset_choice.setStyleSheet("border-left : none; border-right : none; border-top : none")
        self.cbox_asset_choice.addItem(QIcon(icon_path("ICON_ACTION")),
                                       "Action")
        self.cbox_asset_choice.addItem(QIcon(icon_path("ICON_GROUP")), "Group")
        self.cbox_asset_choice.addItem(QIcon(icon_path("ICON_MATERIAL")),
                                       "Material")

        self.assetChoiceLayout.addWidget(self.cbox_asset_choice)
        self.outlinerLayout.addWidget(self.treeWidget)

        self.leftPanelLayout.addLayout(self.assetChoiceLayout)
        self.leftPanelLayout.addLayout(self.outlinerLayout)

        #Tool Box
        self.toolBoxPanel = QFrame()
        self.toolBoxPanel.setStyleSheet(
            "border : none; background-color : rgb(100,100,100)")
        self.toolBoxLayout = QVBoxLayout()

        self.toolBoxPanel.setLayout(self.toolBoxLayout)

        self.leftPanelLayout.addWidget(self.toolBoxPanel)

        #Middle
        self.middle = QFrame()
        self.middle.setStyleSheet(get_css('2DSpace'))

        self.middleLayout = QVBoxLayout()
        self.middleLayout.setContentsMargins(0, 0, 0, 0)

        self.thumbnailList = ThumbnailList(self.folder)
        self.thumbnailList.itemClicked.connect(self.onClickThumb)
        self.thumbnailList.itemDoubleClicked.connect(self.apply_pose)

        self.middleLayout.addWidget(self.topBarArea)
        self.middleLayout.addWidget(self.thumbnailList)

        self.middle.setLayout(self.middleLayout)

        #Right Panel
        self.rightPanel = QFrame()
        #self.rightPanel.setMaximumWidth(256)
        #self.rightPanel.setMinimumWidth(256)

        self.rightPanel.setStyleSheet(get_css('PanelRight'))

        self.rightLayout = QVBoxLayout()
        self.rightLayout.setContentsMargins(4, 4, 4, 4)

        self.rightPanel.setLayout(self.rightLayout)

        #Splitter
        self.splitter = QSplitter(Qt.Horizontal)
        self.splitter.setStyleSheet(get_css('Splitter'))
        #self.splitter.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)

        ## Dir button
        btn_parent_dir = PushButton(icon=icon_path('ICON_FILE_PARENT'),
                                    size=[22, 22])

        ### add_asset button
        btn_add_asset = PushButton(icon=icon_path('ICON_ZOOMIN'),
                                   size=[22, 22])
        btn_add_asset.clicked.connect(self.exportAnimPanel)

        btn_refresh = PushButton(icon=icon_path('ICON_FILE_FOLDER'),
                                 size=[22, 22])
        btn_refresh.clicked.connect(self.refresh)

        #open folder button
        btn_open_folder = PushButton(icon=icon_path('OPEN_FOLDER'),
                                     size=[22, 22])
        btn_open_folder.clicked.connect(self.open_folder)

        #search bar
        self.search_bar = LineEdit()
        self.search_bar.textChanged.connect(self.filterThumbnail)

        self.topBarLayout.addWidget(btn_parent_dir)
        self.topBarLayout.addWidget(self.search_bar)
        self.topBarLayout.addWidget(btn_refresh)
        self.topBarLayout.addWidget(btn_open_folder)

        # Adding Panel to splitter
        self.splitter.addWidget(self.leftPanel)
        self.splitter.addWidget(self.middle)
        self.splitter.addWidget(self.rightPanel)

        self.splitter.setSizes([132, 512, 256])

        self.splitter.setStretchFactor(0, 0)
        self.splitter.setStretchFactor(1, 1)
        self.splitter.setStretchFactor(2, 0)

        #self.mainLayout.addWidget(self.topBarArea)
        self.mainLayout.addWidget(self.splitter)

        #shortcut
        self.shortcut_zoom_in = QShortcut(QKeySequence("+"), self)
        self.shortcut_zoom_out = QShortcut(QKeySequence("-"), self)

        self.shortcut_zoom_in.activated.connect(self.zoom_in)
        self.shortcut_zoom_out.activated.connect(self.zoom_out)

        self.setLayout(self.mainLayout)
        #self.show()

    def refresh(self):
        self.treeWidget.clear()

        TreeWidget().recursive_dir(self.folder, self.treeWidget,
                                   self.folder.count(os.sep))

    def open_folder(self):
        try:
            os.startfile(self.folder)
        except:
            subprocess.Popen(['xdg-open', self.folder])

    def exportAnimPanel(self):
        clear_layout(self.rightLayout)

        self.exportAnimPanel = ExportAnimPanel(self)

        self.rightLayout.addLayout(self.exportAnimPanel)

    def zoom_in(self):
        new_size = self.thumbnailList.iconSize().width()
        if not new_size > 512:
            new_size *= 1.25

        self.thumbnailList.setIconSize(QSize(new_size, new_size))
        #self.thumbnailList.setStyleSheet("QListView::item {height: %s;}"%(new_size+6))

    def zoom_out(self):
        new_size = self.thumbnailList.iconSize().width()
        if not new_size < 64:
            new_size *= 0.75

        self.thumbnailList.setIconSize(QSize(new_size, new_size))
        #self.thumbnailList.setStyleSheet("QListView::item {height: %s;}"%(new_size+6))

    # When selected of folder in the outliner
    def onClickItem(self, item):
        self.thumbnailList.clear()
        #a= TreeWidget(item.text(1))
        #self.middle.addWidget(ThumbnailPanel.createWidget(item.text(1)))
        folder = item.text(1)

        for root, dirs, files in os.walk(folder):
            for filename in files:
                if os.path.splitext(filename)[1] in ['.png', '.jpg']:
                    full_path = os.path.abspath(os.path.join(root, filename))

                    name = os.path.splitext(filename)[0].split('_')[0].replace(
                        '-', ' ').capitalize()
                    item = QListWidgetItem(name)
                    item.setIcon(QIcon(full_path))
                    item.full_path = full_path

                    self.thumbnailList.addItem(item)

    # display information when clicking on a thumbnail
    def onClickThumb(self, item):
        clear_layout(self.rightLayout)

        base_name = os.path.basename((item.full_path))
        dir_name = os.path.dirname((item.full_path))

        description_name = base_name.replace(
            base_name.split('_')[-1], 'description.txt')
        description_path = os.path.join(dir_name, description_name)

        infile = open(description_path).read()

        self.textPanel = QFrame()
        self.textPanel.setStyleSheet(
            "border : none; background-color : rgb(100,100,100)")

        #self.text

        self.textLayout = QVBoxLayout()
        self.textPanel.setLayout(self.textLayout)
        #Fill layout
        #Text description
        self.textWidget = QPlainTextEdit()
        self.textWidget.setPlainText(infile)
        self.textLayout.addWidget(self.textWidget)
        #Preview Image
        self.previewImage = QLabel()
        self.previewImage.setStyleSheet("border : none;")
        #sizePolicy = QSizePolicy(QSizePolicy.Ignored, QSizePolicy.Ignored)
        #sizePolicy.setHeightForWidth(True)
        self.previewImage.setSizePolicy(QSizePolicy.Preferred,
                                        QSizePolicy.Preferred)

        self.previewImage.setMinimumSize(256, 256)
        self.previewImage.setMaximumSize(256, 256)
        self.previewImage.setScaledContents(True)
        #self.previewImage.setWidgetResizable(True)

        thumb = QPixmap(item.full_path)
        self.previewImage.setPixmap(thumb)

        self.rightLayout.addWidget(self.previewImage)
        self.rightLayout.addWidget(self.textPanel)

    def apply_pose(self, item):
        ob = self.context.scene.objects.active

        clear_layout(self.toolBoxLayout)

        self.frame_current = bpy.context.scene.frame_current

        self.blend = QSlider()
        self.blend.setOrientation(Qt.Horizontal)
        self.blend.setValue(100)
        self.blend.setMaximum(100)

        self.action_left = CheckBox('Left')
        self.action_left.setChecked(True)

        self.action_right = CheckBox('Right')
        self.action_right.setChecked(True)

        self.selected_only = CheckBox('Selected only')
        self.selected_only.setChecked(True)

        self.mirror_pose = CheckBox('Mirror')
        self.mirror_pose.setChecked(False)

        self.toolBoxLayout.addWidget(self.blend)

        row_L_R = QHBoxLayout()
        row_L_R.addWidget(self.action_right)
        row_L_R.addWidget(self.action_left)

        self.toolBoxLayout.addLayout(row_L_R)

        self.toolBoxLayout.addWidget(self.selected_only)
        self.toolBoxLayout.addWidget(self.mirror_pose)

        self.action = {}
        item_basename = os.path.splitext(item.full_path)[0]
        action_txt = item_basename.replace('_thumbnail', '_action') + '.txt'
        self.blend.setValue(100)

        with open(action_txt) as poseLib:
            for line in poseLib:
                fcurve = line.split("=")[0]
                value = eval(line.split("=")[1].replace("\n", ""))

                self.action[fcurve] = value

        if ob:
            for fcurve, value in self.action.items():
                for path, channel in value.items():

                    #print(channel.items())
                    for array_index, attributes in channel.items():
                        correct_path = find_fcurve_path(
                            ob, fcurve, path, array_index)
                        dstChannel = correct_path[0]

                        for index, keypose in enumerate(
                                self.action[fcurve][path][array_index]):
                            #print(keypose)
                            self.action[fcurve][path][array_index][index][
                                1].append(dstChannel)
                            #if find_mirror(fcurve) :

        self.blend.valueChanged.connect(lambda: self.refresh_pose(action_txt))
        self.action_left.stateChanged.connect(
            lambda: self.refresh_pose(action_txt))
        self.action_right.stateChanged.connect(
            lambda: self.refresh_pose(action_txt))
        self.selected_only.stateChanged.connect(
            lambda: self.refresh_pose(action_txt))
        self.mirror_pose.stateChanged.connect(
            lambda: self.refresh_pose(action_txt))

        self.refresh_pose(action_txt)

    # Apply the pose or anim to the rig
    def refresh_pose(self, action):
        ob = self.context.scene.objects.active
        if ob.type == 'ARMATURE' and ob.mode == 'POSE':
            read_anim(self.action,
                      self.blend.value() * 0.01, self.action_left.isChecked(),
                      self.action_right.isChecked(),
                      self.selected_only.isChecked(),
                      self.mirror_pose.isChecked(), self.frame_current)

    # When taping in the search bar
    def filterThumbnail(self):
        items = (self.thumbnailList.item(i)
                 for i in range(self.thumbnailList.count()))

        for w in items:
            if self.search_bar.text().lower() not in w.text().lower():
                w.setHidden(True)
            else:
                w.setHidden(False)

    def closeEvent(self, event):
        self.widget_close = True
        self.deleteLater()
class Broswer_Img(QMainWindow):
    """
    选择图片文件并且预览,自动匹配多图的情况和背景图片
    """
    Close_Signal = pyqtSignal(list)

    def __init__(self, *args, **kwargs):
        QMainWindow.__init__(self, *args, **kwargs)
        self.Current_Dir = QDir.home().absolutePath()
        #self.Current_Dir = Wk_Dir
        self.setWindowTitle("Select Imags")
        self.setWindowModality(Qt.ApplicationModal)
        self.Left_Dock_Code()
        self.Central_Frame_Code()
        self.Right_Dock_Code()
        self.connect_Signals()

        self.wb_nav_left.setEnabled(False)
        self.wb_nav_right.setEnabled(False)
        self.bkgd_nav_left.setEnabled(False)
        self.bkgd_nav_right.setEnabled(False)

        #self.setGeometry(200, 200, 1000, 600)
        #self.setMaximumSize(QSize(1000, 600))

    def Left_Dock_Code(self):
        self.Left_Frame = QFrame(self)
        self.Model = QFileSystemModel()
        self.Model.setNameFilterDisables(False)
        self.Model.setRootPath(self.Current_Dir)
        #self.Model.setSorting(QDir.DirsFirst | QDir.IgnoreCase | QDir.Name)
        self.Model.setFilter(QDir.NoDotAndDotDot | QDir.AllDirs
                             | QDir.AllEntries)
        self.Model.setNameFilters(['*.tif'])
        self.Tree = QTreeView(self.Left_Frame)
        self.Tree.setModel(self.Model)
        self.Tree.setRootIndex(self.Model.index(self.Current_Dir))
        self.Tree.expandAll()
        self.Dir_Select = QPushButton("Select a Folder", self.Left_Frame)
        layout = QVBoxLayout()
        layout.addWidget(self.Tree)
        layout.addWidget(self.Dir_Select)
        self.Left_Frame.setLayout(layout)
        self.Left_Dock = QDockWidget('Broswer Images', self)
        self.Left_Dock.setWidget(self.Left_Frame)
        self.Left_Dock.setFeatures(QDockWidget.NoDockWidgetFeatures)
        self.Dir_Select.clicked.connect(self.dir_selection)
        self.addDockWidget(Qt.LeftDockWidgetArea, self.Left_Dock)

    def Central_Frame_Code(self):
        self.Central_Frame = QFrame(self)
        layout = QGridLayout()
        self.wb_label = QLabel(self.Central_Frame)
        self.bkgd_label = QLabel(self.Central_Frame)
        #self.wb_label.setMaximumHeight(30)
        self.wb_label.setWordWrap(True)

        self.wb = QLabel(self.Central_Frame)
        self.wb.setScaledContents(True)
        self.bkgd = QLabel(self.Central_Frame)
        self.bkgd.setScaledContents(True)
        self.wb.setMaximumSize(QSize(300, 300))
        self.bkgd.setMaximumSize(QSize(300, 300))

        self.wb_navigator = QFrame(self.Central_Frame)
        self.wb_nav_left = QPushButton('<--', self.wb_navigator)
        self.wb_nav_right = QPushButton('-->', self.wb_navigator)
        nav_layout = QHBoxLayout()
        nav_layout.addWidget(self.wb_nav_left)
        nav_layout.addWidget(self.wb_nav_right)
        self.wb_navigator.setLayout(nav_layout)
        self.wb_navigator.setMaximumHeight(60)

        self.bkgd_navigator = QFrame(self.Central_Frame)
        self.bkgd_nav_left = QPushButton('<--', self.bkgd_navigator)
        self.bkgd_nav_right = QPushButton('-->', self.bkgd_navigator)
        nav_layout2 = QHBoxLayout()
        nav_layout2.addWidget(self.bkgd_nav_left)
        nav_layout2.addWidget(self.bkgd_nav_right)
        self.bkgd_navigator.setLayout(nav_layout2)
        self.bkgd_navigator.setMaximumHeight(60)

        self.btns = QFrame(self.Central_Frame)
        self.btns.setMaximumHeight(60)
        self.Btn_Add = QPushButton('Add', self.btns)
        self.Btn_Close = QPushButton('Close', self.btns)
        btn_layout = QHBoxLayout()
        btn_layout.addWidget(self.Btn_Add)
        btn_layout.addWidget(self.Btn_Close)
        self.btns.setLayout(btn_layout)

        # 根据具体的传入参数构建不同的视图
        layout.addWidget(self.wb_label, 0, 0)
        layout.addWidget(self.bkgd_label, 0, 1)

        layout.addWidget(self.wb, 1, 0)
        layout.addWidget(self.bkgd, 1, 1)

        layout.addWidget(self.wb_navigator, 2, 0)
        layout.addWidget(self.bkgd_navigator, 2, 1)

        layout.addWidget(self.btns, 3, 0, 2, 0)
        layouts = QVBoxLayout()
        layouts.addLayout(layout)
        self.Central_Frame.setLayout(layouts)
        self.setCentralWidget(self.Central_Frame)
        #self.setStyleSheet('border:1px solid red')

    def Right_Dock_Code(self):
        self.Added_Img_tree = Img_Tree([], self)
        self.Right_Dock = QDockWidget('Selected Images', self)
        self.Right_Dock.setWidget(self.Added_Img_tree)
        self.Right_Dock.setFeatures(QDockWidget.NoDockWidgetFeatures)
        self.addDockWidget(Qt.RightDockWidgetArea, self.Right_Dock)

    def connect_Signals(self):
        self.Tree.clicked.connect(self.Load_Img_to_Central_Frame)
        self.wb_nav_left.clicked.connect(self.change_img_index)
        self.wb_nav_right.clicked.connect(self.change_img_index)
        self.bkgd_nav_left.clicked.connect(self.change_img_index)
        self.bkgd_nav_right.clicked.connect(self.change_img_index)
        self.Btn_Add.clicked.connect(self.Add_Btn_Action)
        self.Btn_Close.clicked.connect(self.Close_Btn_Action)

    def Load_Img_to_Central_Frame(self, Index):
        select_file = self.Tree.model().filePath(Index)
        _, ext = os.path.splitext(select_file)
        if ext in ['.tif', '.jpeg', '.png', '.jpg']:
            self.Related_Imgs = BioRad_Imgs(select_file)
        self.set_Central_Frame()

    def set_Central_Frame(self):
        self.wb_nav_left.setEnabled(False)
        self.wb_nav_right.setEnabled(False)
        self.bkgd_nav_left.setEnabled(False)
        self.bkgd_nav_right.setEnabled(False)

        self.current_wb = self.Related_Imgs.WB_list[self.Related_Imgs.wb_index]
        self.current_bkgd = self.Related_Imgs.BKGD_list[
            self.Related_Imgs.bkgd_index]
        self.wb_label.setText(
            self.current_wb.replace(self.Related_Imgs.Dir, '.'))
        self.bkgd_label.setText(
            self.current_bkgd.replace(self.Related_Imgs.Dir, '.'))
        wb, _ = CV_Img_to_QImage(cv2.imread(self.current_wb))
        bkgd, _ = CV_Img_to_QImage(cv2.imread(self.current_bkgd))
        self.wb.setPixmap(wb)
        self.wb.setScaledContents(True)
        self.bkgd.setPixmap(bkgd)
        wb_len = len(self.Related_Imgs.WB_list)
        bkgd_len = len(self.Related_Imgs.BKGD_list)
        if self.Related_Imgs.wb_index > 0:
            self.wb_nav_left.setEnabled(True)
        if wb_len - self.Related_Imgs.wb_index > 1:
            self.wb_nav_right.setEnabled(True)

        if self.Related_Imgs.bkgd_index > 0:
            self.bkgd_nav_left.setEnabled(True)
        if bkgd_len - self.Related_Imgs.bkgd_index > 1:
            self.bkgd_nav_right.setEnabled(True)

    def change_img_index(self):
        sender = self.sender()
        if sender == self.wb_nav_left:
            self.Related_Imgs.wb_index = self.Related_Imgs.wb_index - 1
        if sender == self.wb_nav_right:
            self.Related_Imgs.wb_index = self.Related_Imgs.wb_index + 1
        if sender == self.bkgd_nav_left:
            self.Related_Imgs.bkgd_index = self.Related_Imgs.bkgd_index - 1
        if sender == self.bkgd_nav_right:
            self.Related_Imgs.bkgd_index = self.Related_Imgs.bkgd_index + 1
        self.set_Central_Frame()

    def Add_Btn_Action(self):
        list = [{'wb': self.current_wb, 'bkgd': self.current_bkgd}]
        self.Added_Img_tree.Add_top_Level_Item(list)
        print(self.Added_Img_tree.imgs)

    def Close_Btn_Action(self):
        self.close()

    def closeEvent(self, event):
        self.Close_Signal.emit(self.Added_Img_tree.imgs)

    def dir_selection(self):
        global Wk_Dir
        dir = QFileDialog.getExistingDirectory(self, "Choose a Directory",
                                               Wk_Dir)
        self.Current_Dir = dir
        Wk_Dir = dir
        self.Tree.setRootIndex(self.Model.index(self.Current_Dir))
        self.Left_Dock.setWindowTitle(dir)
Exemplo n.º 15
0
    def __init__(self, parent=None):
        super().__init__(
            parent,
            Qt.MSWindowsFixedSizeDialogHint
            | Qt.WindowTitleHint
            | Qt.WindowSystemMenuHint
            | Qt.WindowCloseButtonHint,
        )
        self.setAttribute(Qt.WA_DeleteOnClose)
        self.setWindowModality(Qt.ApplicationModal)
        self.setWindowTitle(self.tr("About"))

        app = QApplication.instance()
        name = app.applicationName()
        domain = app.organizationDomain()

        iconLabel = QLabel(self)
        iconLabel.setAlignment(Qt.AlignCenter)
        iconLabel.setMaximumWidth(250)
        iconLabel.setMinimumSize(250, 210)
        icon = self.windowIcon()
        size = icon.actualSize(QSize(186, 186))
        iconLabel.setPixmap(icon.pixmap(size))
        titleLabel = QLabel(self)
        titleLabel.setText(
            self.
            tr("<p style='color: #353535; font-size: 24pt; font-weight: 250'>"
               "TruFont Font Editor</p>"
               "<p style='font-size: 13pt; font-weight: 400'>{} Pristine Wax</p>"
               ).format(__version__))
        textLabel = QLabel(self)
        text = self.tr(
            "<p>{n} is a free and open source font editor and scripting "
            "environment made by the developers of the {n} community.</p>"
            "<p>{n} is built upon the "
            "<a href='http://ts-defcon.readthedocs.org/en/ufo3/' "
            "style='color: #356FDE'>defcon</a> UFO library and exposes a "
            "<a href='http://robofab.com/' style='color: #356FDE'>robofab</a>"
            "-like API for scripting purposes.</p>"
            "<p>Running on Qt {} (PyQt {}).</p>"
            "<p>Version {} {} – Python {}.").format(
                QT_VERSION_STR,
                PYQT_VERSION_STR,
                __version__,
                gitShortHash,
                platform.python_version(),
                n=name,
            )
        if domain:
            text += self.tr(
                "<br>See <a href='http://{d}' style='color: #356FDE'>{d}</a> "
                "for more information.</p>").format(d=domain)
        else:
            text += "</p>"
        textLabel.setText(text)
        textLabel.setOpenExternalLinks(True)
        textLabel.setWordWrap(True)

        authorsLabel = QTextBrowser(self)
        authorsLabel.setText("\n".join(self.authors()))

        licenseLabel = QTextBrowser(self)
        licenseLabel.setText(licenseText)

        thanksLabel = QTextBrowser(self)
        thanksLabel.setText(thanksText)

        self.stackWidget = QStackedWidget(self)
        self.stackWidget.addWidget(textLabel)
        self.stackWidget.addWidget(authorsLabel)
        self.stackWidget.addWidget(licenseLabel)
        self.stackWidget.addWidget(thanksLabel)

        textLayout = QVBoxLayout()
        textLayout.setContentsMargins(0, 14, 16, 16)
        textLayout.addWidget(titleLabel)
        textLayout.addWidget(self.stackWidget)
        spacer = QWidget()
        spacer.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Expanding)
        textLayout.addWidget(spacer)

        mainLayout = QHBoxLayout()
        mainLayout.addWidget(iconLabel)
        mainLayout.addLayout(textLayout)

        frame = QFrame()
        frame.setMinimumHeight(54)
        frame.setMaximumHeight(54)
        frame.setStyleSheet("background: rgb(230, 230, 230)")

        buttonsLayout = QHBoxLayout(frame)
        for index, text in enumerate(("Authors", "License", "Credits")):
            label = QLabel(text, self)
            label.setAlignment(Qt.AlignCenter)
            label.setCursor(Qt.PointingHandCursor)
            label.setProperty("index", index + 1)
            label.setStyleSheet("color: #356FDE; text-decoration: underline")
            label.installEventFilter(self)
            buttonsLayout.addWidget(label)

        layout = QVBoxLayout(self)
        layout.setContentsMargins(0, 0, 0, 0)
        layout.addLayout(mainLayout)
        layout.addWidget(frame)
Exemplo n.º 16
0
class MainWindow(QMainWindow):
    def __init__(self, parent: QWidget = None) -> None:
        super(MainWindow, self).__init__(parent)

        # Welcome - about message.
        self.show_about_message()

        # Data structures.
        self.list_of_video_IDs: list = []
        self.log_texts: list = []
        self.streams: list = []
        self.yt: Optional[YouTube] = None
        self.yt_playlist: Optional[Playlist] = None
        self.yt_history: list = []
        self.yt_folder: pathlib.Path = pathlib.Path("./")
        self.down_vids_counter: int = 0

        # setup user interface
        self.create_main_window()
        self.create_menu_bar()

        self.btn_check.clicked.connect(self.check)
        self.btn_download.clicked.connect(self.download)
        self.btn_add_row.clicked.connect(self.add_row)
        self.btn_remove_row.clicked.connect(self.remove_row)
        self.btn_show_log.toggled.connect(self.log_frame.setVisible)
        self.tabs.currentChanged.connect(self.disable_btns)
        self.btn_open_CWD.clicked.connect(self.open_CWD)
        self.btn_cancel.clicked.connect(self.cancel)
        self.le_video_url.editingFinished.connect(self.clear_list)

    def create_main_window(self) -> None:
        """Creates main window: all buttons, layouts
        connections are kept outside this method.
        This method is called inside the init method
        """
        self.setWindowTitle("RTV and YT video downloader")
        self.setWindowIcon(QIcon(":/main_window_icon.png"))
        self.resize(800, 700)

        header = ["Video ID", "Video info"]
        self.table = QTableWidget()
        self.table.setColumnCount(len(header))
        self.table.setRowCount(len(TEST_TABLE) + 3)
        self.table.setHorizontalHeaderLabels(header)
        self.populate_table(TEST_TABLE)
        self.table.setSizeAdjustPolicy(QAbstractScrollArea.AdjustToContents)
        self.table.resizeColumnsToContents()

        vbox_table = QVBoxLayout()
        vbox_table.addWidget(self.table)

        self.log_frame = QFrame()
        self.log_frame.setMaximumHeight(600)
        self.log_frame.setMinimumHeight(200)

        log_label = QLabel("Log text:")
        self.le_log_text = QTextEdit()
        self.le_log_text.setReadOnly(True)

        log_vbox = QVBoxLayout()
        log_vbox.addWidget(log_label)
        log_vbox.addWidget(self.le_log_text)
        self.log_frame.setLayout(log_vbox)
        self.btn_check = QPushButton("Check")
        self.btn_download = QPushButton("Download")
        self.btn_add_row = QPushButton("Add row")
        self.btn_remove_row = QPushButton("Remove last row")
        self.btn_cancel = QPushButton("Cancel")
        self.btn_cancel.setEnabled(False)
        self.btn_show_log = QPushButton("Log text")
        self.btn_show_log.setCheckable(True)
        self.btn_show_log.setChecked(True)

        self.btn_open_CWD = QPushButton("Open")
        self.cb_convert_mp3 = QCheckBox("Convert to mp3")
        self.cb_convert_mp3.setChecked(True)

        label_WD = QLabel("Current directory:")
        label_WD_lyt = QHBoxLayout()
        label_WD_lyt.addWidget(self.btn_open_CWD)
        label_WD_lyt.addWidget(label_WD)

        label_WD_lyt.addStretch(1)
        self.le_CWD = QLineEdit(str(self.yt_folder))
        self.le_CWD.setReadOnly(True)

        self.progress_bar = QProgressBar(self)
        # self.progress_bar.setGeometry(200, 80, 250, 20)

        vbox_WD = QVBoxLayout()
        vbox_WD.addLayout(label_WD_lyt)
        vbox_WD.addWidget(self.le_CWD)
        vbox_WD.addWidget(self.progress_bar)

        vbox1 = QVBoxLayout()
        vbox1.addWidget(self.btn_check)
        vbox1.addWidget(self.btn_download)
        vbox1.addWidget(self.btn_add_row)
        vbox1.addWidget(self.btn_remove_row)
        vbox1.addWidget(self.btn_cancel)
        vbox1.addSpacing(20)
        vbox1.addWidget(self.btn_show_log)
        vbox1.addStretch()

        self.rtv_download_tab = QWidget()
        self.rtv_download_tab.setLayout(vbox_table)

        label_url = QLabel("Video URL: ")
        self.le_video_url = QLineEdit(TEST_YT_VIDEO)

        hbox_le = QHBoxLayout()
        hbox_le.addWidget(label_url)
        hbox_le.addWidget(self.le_video_url)

        self.lw_streams = QListWidget()

        vbox_tube1 = QVBoxLayout()
        vbox_tube1.addLayout(hbox_le)
        vbox_tube1.addWidget(self.lw_streams)
        vbox_tube1.addWidget(self.cb_convert_mp3)

        self.youtube_download_tab = QWidget()
        self.youtube_download_tab.setLayout(vbox_tube1)
        # self.log_frame.hide()

        self.tabs = QTabWidget()
        self.tabs.addTab(self.rtv_download_tab, "RTV_radio_downloads")
        self.tabs.addTab(self.youtube_download_tab, "Youtube_downloads")

        hbox1 = QHBoxLayout()
        hbox1.addWidget(self.tabs)
        hbox1.addLayout(vbox1)

        vbox2 = QVBoxLayout()
        vbox2.addLayout(hbox1)
        vbox2.addLayout(vbox_WD)
        # vbox2.addWidget(self.progress_bar)
        vbox2.addWidget(self.log_frame)

        main_layout = QVBoxLayout()
        main_layout.addLayout(vbox2)

        self.main_window = QWidget()
        self.main_window.setLayout(main_layout)
        self.setCentralWidget(self.main_window)

    def create_menu_bar(self):
        """
        this is not needed yet
        changed my mind: for importing list of IDs
        """

        # file menu
        self.file_menu = self.menuBar().addMenu("&File")

        file_load_action = self.create_action(
            "&Load file",
            shortcut="Ctrl+L",
            slot=self.import_IDs,
            tip="Import text file with a column of IDs",
            icon="import-icon",
        )
        file_quit_action = self.create_action("&Quit",
                                              shortcut="Ctrl+q",
                                              slot=self.close,
                                              tip="Close the application")

        self.add_actions(self.file_menu, [file_load_action, file_quit_action])

        # Edit menu
        self.edit_menu = self.menuBar().addMenu("&Edit")

        set_filter_action = self.create_action(
            "Select &filter",
            shortcut="Ctrl+F",
            slot=self.refine_streams,
            tip="Select different filter to show streams in list",
            icon="filter-icon",
        )

        self.add_actions(self.edit_menu, [set_filter_action])

        # help menu
        self.help_menu = self.menuBar().addMenu("&Help")

        help_about_action = self.create_action(
            "&About",
            shortcut="Ctrl+Shift+A",
            slot=self.show_about_message,
            tip="Show info about the application.",
            icon="tv-icon",
        )

        self.add_actions(self.help_menu, [help_about_action])

    def show_about_message(self):
        QMessageBox.about(
            self,
            "This is the video downloader version: {0}".format(__version__),
            "Use <b>Video downloader</b> to download videos."
            "There are two options:<br>"
            '<a href="https://4d.rtvslo.si/arhiv/&sp=qs:raal">RTV SLO</a><br>'
            "or you should go to<br>"
            '<a href="https://www.youtube.com/?gl=SI&hl=sl">Youtube</a>.<br><br>'
            "Select one of two options and <b>click</b> one of above links to pop up "
            "appropriate web page from which you wish to select videos.<br><br>"
            "Have fun.",
        )

    def refine_streams(self):
        raise NotImplementedError("Set filter action. To do.")

    def populate_table(self, list):
        """
        Repopulates the table, with the items in list argument
        """
        rows = len(list)  # self.table.rowCount()
        self.table.setRowCount(rows)
        for i in range(len(list)):
            self.table.setItem(i, 0, QTableWidgetItem(list[i]))

    def add_row(self):
        row_position = self.table.rowCount()
        self.table.insertRow(row_position)

    def remove_row(self):
        row_position = self.table.currentRow()
        if row_position == -1:  # ni vrstice
            row_position = self.table.rowCount() - 1
        self.table.removeRow(row_position)

    def import_IDs(self):

        path = "."
        fname, f_type = QFileDialog.getOpenFileName(
            self, "Import IDs from text file", path, "Text files (*.txt)")
        if fname:
            fh = open(fname, "r")
            raw_text = fh.read()
            imported_IDs = raw_text.split("\n")
            self.populate_table(imported_IDs)

    def check(self):
        """Selects appropriate function of check button, according to
        the selected tab.
        """
        if self.tabs.currentIndex() == 0:
            self.check_IDs()
        elif self.tabs.currentIndex() == 1:
            self.get_formats()

    def download_playlist(self):
        if self.yt_playlist is None:
            QMessageBox.warning(self, "Download error",
                                "Link is not a playlist.")
            return
        for yt in self.yt_playlist:
            print(f"{yt=}")
            print(f"{yt.title()=}")
            print(f"{yt.streams=}")
            stream = yt.streams.first()
            print(f"{stream=}")

    def get_formats(self):
        """Creates youtube video object
        acquires all possible selected formats and
        populates the QListWidget (formats_list)
        user has to select which format to download.
        """
        yt_url = self.le_video_url.text()
        self.yt = YouTube(
            yt_url)  # , on_progress_callback = self.progress_check
        self.streams = self.yt.streams.filter(progressive=True)
        self.populate_list_youtube()
        return True, "Youtube streams info acquired"

    def progress_check(self,
                       stream=None,
                       chunk=None,
                       file_handle=None,
                       remaining=None):

        # Gets the percentage of the file that has been downloaded.
        # percent = (100*(stream.filesize-remaining))/stream.filesize
        # self.progress_bar.setValue(percent)
        self.progress_bar.setRange(0, 0)

    def update_CWD(self):
        """
        syncs the line edit and actual CWD
        """
        self.le_CWD.setText(str(self.yt_folder))

    def browse_and_set_CWD(self):
        """
        select current working directory (CWD)
        """
        fname = QFileDialog.getExistingDirectory(self, "Where to save video?",
                                                 str(self.yt_folder))

        if fname:
            self.yt_folder = pathlib.Path(fname)
            self.update_CWD()
            return True
        else:
            return False

    def open_CWD(self):
        """opens CWD in windows explorer"""
        if platform.system() == "Windows":
            command = 'explorer "{0}"'.format(self.yt_folder)
            subprocess.run(command.replace("/", "\\"))
        else:
            command = "gnome-terminal -x cd {0}".format(
                self.yt_folder.as_posix())
            subprocess.run("gnome-terminal")

    def check_IDs(self):
        """
        Check which of the cells contain IDs of a videos that can be fetched,
        for each video some basic information is printed to the second column.
        if error, I still have to think what to do
        """
        rows = self.table.rowCount()
        for i in range(rows):
            item = self.table.item(i, 0)
            if item:
                video_ID_number = item.text()
                get_info_api = rtv_videos_downloader.RTV_VIDEO_DOWNLOAD_LINK.format(
                    video_ID_number)
                response = requests.get(get_info_api)
                if response.status_code != 200:
                    return False, "Error at acquiring the info about the video."
                response_dict = response.json()
                # info about the file name
                if "response" in response_dict:
                    file_name = response_dict["response"]["mediaFiles"][0][
                        "filename"]
                    self.table.setItem(i, 1, QTableWidgetItem(file_name))
        self.table.resizeColumnsToContents()
        return True, "info added"

    def download(self):
        """Selects appropriate function of download button according to
        the selected tab - youtube or rtv
        """
        if self.tabs.currentIndex() == 0:
            self.download_videos_rtv()
        elif self.tabs.currentIndex() == 1:
            self.download_yt_video()

    def download_yt_video(self):
        """Downloads selected youtube video."""
        # get video from the user selection in the list widget
        if self.lw_streams.currentItem() is None:
            QMessageBox.warning(self, "Warning",
                                "Please select a stream from the list.")
            return
        idx = self.lw_streams.currentRow()
        stream = self.streams[idx]

        # show file size and ask user if it is realy sure he wants to download
        answer = QMessageBox.question(
            self,
            "File size",
            "Are you sure you want to download video:<br><br>" + "<b>" +
            self.yt.title + "</b>" +
            "<br><br><br>With file size: <b>{0:.1f} MB</b>".format(
                stream.filesize / 2**20),
        )
        if answer == QMessageBox.No:
            return

        # where to save folder
        OK = self.browse_and_set_CWD()
        if not OK:
            return

        # set up progress bar
        self.progress_bar.setMaximum(100)
        self.progress_bar.setValue(0)
        # Create download worker and move it to new thread.
        self.download_thread = QThread()
        self.download_worker = yt_videos_downloader.DownloadYoutubeWorker(
            self.yt, stream, self.yt_folder, self.cb_convert_mp3.isChecked(),
            self)
        self.download_worker.moveToThread(self.download_thread)
        self.download_thread.started.connect(self.download_worker.run)
        self.download_worker.finished.connect(self.download_thread.quit)
        self.download_worker.finished.connect(self.download_worker.deleteLater)
        self.download_thread.finished.connect(self.download_thread.deleteLater)

        # Reporting progress:
        self.download_worker.preparation_started.connect(self.add_to_log)
        self.download_worker.preparation_started.connect(self.progress_check)
        self.download_worker.start_video_loading.connect(self.add_to_log)
        self.download_worker.video_downloaded.connect(self.add_to_log)
        self.download_worker.finished.connect(self.done)
        self.download_worker.converted_to_mp3.connect(self.add_to_log)
        # Start the worker thread.
        self.download_thread.start()

        # start download
        self.start_downloading()
        self.down_vids_counter = self.down_vids_counter + 1

    def download_videos_rtv(self) -> None:
        """Create list of all videos. Subsequently, start the download thread
        and connect all the methods with the signals emitted inside the download thread.
        """
        rows = self.table.rowCount()
        number_of_rows = range(rows)
        self.list_of_video_IDs = []
        for i in number_of_rows:
            item = self.table.item(i, 0)
            if item:
                video_ID_number = item.text()
                self.list_of_video_IDs.append(video_ID_number)
        self.progress_bar.setMaximum(len(self.list_of_video_IDs))
        self.progress_bar.setValue(0)

        self.download_thread = QThread()
        self.download_worker = rtv_videos_downloader.DownloadVideoWorker(
            self.list_of_video_IDs, self)
        self.download_worker.moveToThread(self.download_thread)
        self.download_thread.started.connect(self.download_worker.run)
        self.download_worker.finished.connect(self.download_thread.quit)
        self.download_worker.finished.connect(self.download_worker.deleteLater)
        self.download_thread.finished.connect(self.download_thread.deleteLater)

        # Reporting progress:
        self.download_worker.preparation_started.connect(self.add_to_log)
        self.download_worker.start_video_loading.connect(self.add_to_log)
        self.download_worker.video_downloaded.connect(self.update_progress_bar)
        self.download_worker.start_downloading.connect(self.start_downloading)
        self.download_worker.finished.connect(self.done)
        # Start the worker thread.
        self.download_thread.start()

    def update_progress_bar(self, msg):
        """
        Update the progress bar, when downloading rtv videos
        First add to log text and then update the k and the progress bar
        """
        k = self.progress_bar.value()
        self.le_log_text.insertPlainText(
            time.strftime("%H:%M:%S") + ":  " + str(k) + "  " + msg + "\n\n")
        self.log_texts.append(msg)
        k = self.progress_bar.value() + 1
        self.progress_bar.setValue(k)
        self.down_vids_counter = self.down_vids_counter + 1
        k = self.down_vids_counter

    def add_to_log(self, msg):
        """Adds message to the log file."""
        k = self.down_vids_counter  # self.progress_bar.value() + 1
        self.log_texts.append(msg)
        self.le_log_text.insertPlainText(
            time.strftime("%H:%M:%S") + ":  " + str(k) + "  " + msg + "\n")

    def start_downloading(self):
        """start downloading, disable Download, Add row buttons
        Enable Cancel button
        """
        self.btn_cancel.setEnabled(True)
        self.btn_download.setEnabled(False)
        self.btn_add_row.setEnabled(False)

    def disable_btns(self):
        """Properly enable, disable buttonsaccording to the selected tab."""
        if self.tabs.currentIndex() == 1:
            self.btn_add_row.setEnabled(False)
            self.btn_remove_row.setEnabled(False)

        elif self.tabs.currentIndex() == 0:
            self.btn_add_row.setEnabled(True)
            self.btn_remove_row.setEnabled(True)

    def done(self):
        """
        Show the message that fetching videos is done.
        Disable Cancel button, enable the Download, Add row buttons and reset progress bar to 0
        """
        self.btn_cancel.setEnabled(False)
        self.btn_download.setEnabled(True)
        self.btn_add_row.setEnabled(True)
        self.progress_bar.setRange(0, 100)
        self.progress_bar.setValue(0)
        QMessageBox.information(self, "Done!",
                                "All desired videos downloaded!")
        self.disable_btns()
        self.download_thread = None

    def cancel(self):
        """Terminate download thread
        Enable Download button, Add row
        Disable Cancel button
        """
        self.download_thread.terminate()
        self.btn_cancel.setEnabled(False)
        self.btn_download.setEnabled(True)
        self.btn_add_row.setEnabled(True)
        self.progress_bar.setValue(0)
        self.disable_btns()
        QMessageBox.warning(
            self,
            "Terminated!",
            "You have terminated the download thread\n\
                                                    see log text to see additional info !",
        )

    def populate_list_youtube(self):
        self.lw_streams.clear()
        if len(self.streams) > 0:
            for stream in self.streams:
                item = QListWidgetItem(str(stream))
                self.lw_streams.addItem(item)

    def clear_list(self):
        self.lw_streams.clear()
        self.streams = []
        self.yt = None

    def closeEvent(self, event):
        folder = pathlib.Path("./history/")
        folder.mkdir(parents=True, exist_ok=True)
        time_string = time.strftime("%m-%d-%Y_%H-%M-%S")
        fname = "log_text_" + time_string + ".txt"
        with open(folder / fname, "w") as f:
            for text in self.log_texts:
                f.write(text + "\n")
        QApplication.quit()

    # ********************************************* HELPER FUNCTIONS
    def add_actions(self, target, actions):
        for action in actions:
            if action is None:
                target.addSeparator()
            else:
                target.addAction(action)

    def create_action(
        self,
        text,
        slot=None,
        shortcut=None,
        icon=None,
        tip=None,
        checkable=False,
        signal="triggered()",
    ):
        action = QAction(text, self)
        if icon is not None:
            action.setIcon(QIcon("./icons/{}.png".format(icon)))
        if shortcut is not None:
            action.setShortcut(shortcut)
        if tip is not None:
            action.setToolTip(tip)
            action.setStatusTip(tip)
        if slot is not None:
            action.triggered.connect(slot)
        if checkable:
            action.setCheckable(True)
        return action
Exemplo n.º 17
0
class MainWindow(QWidget):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.asset_type = get_asset_type()
        self.settings = settings
        self.working_dir = working_dir

        self.title = None
        self.treeWidget = None
        self.cbox_filter = None
        self.widget_close = None
        #self.view_mode = None
        self.context = None
        self.thumbnailList = None

        #self.folders = folder

        QDir.setCurrent(working_dir)

        self.setWindowTitle('Lib Manager')
        self.resize(840, 480)

        self.color_background = '#404040'
        self.color_text_field = '#A7A7A7'
        self.color_button = '#979797'
        self.color_panel_bright = '#727272'
        self.color_panel_dark = '#525252'
        self.color_border = '#2E2E2E'

        self.setUI()

        #self.style_button = "border-color: %s;background-color:%s;"%(self.color_border,self.color_button)

    def setUI(self):
        self.setWindowFlags(Qt.WindowStaysOnTopHint)

        self.mainLayout = QVBoxLayout()

        self.mainLayout.setContentsMargins(0, 0, 0, 0)
        self.mainLayout.setSpacing(0)
        self.setStyleSheet(get_css("MainWindow"))

        #Title Bar
        self.area = ComboBox()
        self.area.setStyleSheet(get_css("ComboBoxArea"))
        self.area.currentIndexChanged.connect(self.change_area)

        #self.area.setSizePolicy(QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed))
        self.area.setFixedWidth(32)

        #self.area.setMinimumWidth(32)
        #self.area.setMinimumHeight(28)

        #Populate the step_filter by the steps in settings

        self.area.addItem(QIcon(icon_path("ICON_GROUP")), "Library")
        self.area.addItem(QIcon(icon_path("ICON_MATERIAL")), "Assets")
        self.area.addItem(QIcon(icon_path("ICON_ARMATURE_DATA")), "Picker")
        self.area.addItem(QIcon(icon_path("ICON_SETTINGS")), "Prefs")

        self.titleBarArea = QFrame()
        self.titleBarLayout = QHBoxLayout()
        self.titleBarArea.setLayout(self.titleBarLayout)
        self.titleBarLayout.setContentsMargins(4, 0, 0, 0)
        self.titleBarArea.setStyleSheet("""
                            border : none; background-color : rgb(100,100,100);
                            border-style: solid;
                            border-color: rgb(50, 50, 50);
                            border-bottom-width: 1px;""")

        self.titleBarArea.setMinimumHeight(28)
        self.titleBarArea.setMaximumHeight(28)

        self.title = Label(text='Library')

        #self.toolBox = QFrame()

        self.toolBoxLayout = QHBoxLayout()
        self.toolBoxLayout.setContentsMargins(12, 0, 12, 0)

        # Batch
        self.btn_batch = PushButton(icon=icon_path("ICON_CONSOLE"),
                                    size=[22, 22])
        self.btn_batch.clicked.connect(self.batch)
        self.btn_batch.setToolTip('Batch')

        # Add asset
        self.btn_add_asset = PushButton(icon=icon_path("ICON_ZOOMIN"),
                                        size=[22, 22])
        self.btn_add_asset.clicked.connect(self.add_asset)
        self.btn_add_asset.setToolTip('Add an asset')

        # Settings Button
        self.btn_settings = PushButton(icon=icon_path("ICON_SETTINGS"),
                                       size=[22, 22])
        self.btn_settings.setToolTip('Settings')

        # Add button to layout
        self.toolBoxLayout.addWidget(self.btn_batch)
        self.toolBoxLayout.addWidget(self.btn_add_asset)
        self.toolBoxLayout.addWidget(self.btn_settings)

        self.horizontalSpacer = QSpacerItem(40, 20, QSizePolicy.Expanding,
                                            QSizePolicy.Minimum)
        self.hSpacer = QSpacerItem(30, 20, QSizePolicy.Maximum,
                                   QSizePolicy.Minimum)

        self.titleBarLayout.addWidget(self.area)
        self.titleBarLayout.addWidget(self.title)
        self.titleBarLayout.addItem(self.horizontalSpacer)
        self.titleBarLayout.addLayout(self.toolBoxLayout)
        #self.titleBarLayout.addItem(self.hSpacer)

        #top Bar
        self.topBarArea = QFrame()
        self.topBarArea.setSizePolicy(
            QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred))
        self.topBarArea.setMinimumHeight(32)
        self.topBarArea.setMaximumHeight(32)

        self.topBarLayout = QHBoxLayout()
        self.topBarLayout.setSpacing(2)
        self.topBarLayout.setContentsMargins(4, 1, 4, 1)

        self.topBarArea.setLayout(self.topBarLayout)
        self.topBarArea.setStyleSheet(get_css('Bar'))

        #Left Panel
        self.leftPanel = QFrame()
        #self.leftPanel.setMaximumWidth(132)

        self.leftPanel.setStyleSheet(get_css('PanelLeft'))

        self.leftPanelLayout = QVBoxLayout()
        self.leftPanelLayout.setContentsMargins(0, 0, 0, 0)
        self.leftPanel.setLayout(self.leftPanelLayout)

        self.outlinerLayout = QVBoxLayout()
        self.outlinerLayout.setContentsMargins(1, 5, 1, 1)

        self.outlinerTopBarLayout = QVBoxLayout()
        self.outlinerTopBarLayout.setContentsMargins(0, 0, 0, 0)

        self.treeWidget = TreeWidget()
        self.treeWidget.create_widget(settings['path'])
        self.treeWidget.itemClicked.connect(self.click_item)

        # comboBox asset cbox_asset_choice
        self.cbox_filter = ComboBox()
        self.cbox_filter.currentIndexChanged.connect(self.change_filter)
        self.cbox_filter.setFixedHeight(28)

        self.cbox_filter.setStyleSheet(get_css("ComboBoxAsset"))

        #self.cbox_asset_choice.setStyleSheet("border-left : none; border-right : none; border-top : none")
        self.cbox_filter.addItem(QIcon(icon_path("ICON_ACTION")), "All")

        for item, info in sorted(self.asset_type.items()):
            self.cbox_filter.addItem(QIcon(info['icon']), item.title(),
                                     info['image'])
            #filter_item.image_path =

        self.outlinerTopBarLayout.addWidget(self.cbox_filter)
        self.outlinerLayout.addWidget(self.treeWidget)

        self.leftPanelLayout.addLayout(self.outlinerTopBarLayout)
        self.leftPanelLayout.addLayout(self.outlinerLayout)

        #Tool Box
        self.toolBoxPanel = QFrame()
        self.toolBoxPanel.setStyleSheet(
            "border : none; background-color : rgb(100,100,100)")
        self.toolBoxLayout = QVBoxLayout()

        self.toolBoxPanel.setLayout(self.toolBoxLayout)

        self.leftPanelLayout.addWidget(self.toolBoxPanel)

        #Middle
        self.middle = QFrame()
        self.middle.setStyleSheet(get_css('2DSpace'))

        self.middleLayout = QVBoxLayout()
        self.middleLayout.setContentsMargins(0, 0, 0, 0)
        self.middleLayout.setSpacing(0)

        self.thumbnailList = ListWidget(self)
        self.assetLayout = QVBoxLayout()
        self.assetLayout.setContentsMargins(0, 0, 0, 0)

        self.assetLayout.addWidget(self.thumbnailList)

        #vSpacer = QSpacerItem(20, 10, QSizePolicy.Expanding, QSizePolicy.Expanding)
        #self.assetLayout.addItem(vSpacer)

        #self.change_view_mode()
        #self.thumbnailList.itemClicked.connect(self.click_thumb)
        #self.thumbnailList = TableWidget(self)

        self.middleLayout.addWidget(self.topBarArea)
        self.middleLayout.addLayout(self.assetLayout)

        self.middle.setLayout(self.middleLayout)

        #Right Panel
        self.rightPanel = QFrame()
        #self.rightPanel.setMaximumWidth(256)
        #self.rightPanel.setMinimumWidth(256)

        self.rightPanel.setStyleSheet(get_css('PanelRight'))

        self.rightLayout = QVBoxLayout()
        self.rightLayout.setContentsMargins(0, 0, 0, 0)
        self.rightLayout.setSpacing(0)

        self.rightPanel.setLayout(self.rightLayout)

        #Splitter
        self.splitter = QSplitter(Qt.Horizontal)
        self.splitter.setStyleSheet(get_css('Splitter'))
        #self.splitter.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)

        ## Dir button
        btn_parent_dir = PushButton(icon=icon_path('ICON_FILE_PARENT'),
                                    size=[22, 22])

        #### add_asset button
        #btn_add_asset = PushButton(icon= icon_path('ICON_ZOOMIN'),size = [22,22])
        #btn_add_asset.clicked.connect(self.add_asset)

        btn_refresh = PushButton(icon=icon_path('ICON_FILE_FOLDER'),
                                 size=[22, 22])
        btn_refresh.clicked.connect(self.refresh)
        btn_refresh.setToolTip('Refresh tree')

        #open folder button
        btn_open_folder = PushButton(icon=icon_path('OPEN_FOLDER'),
                                     size=[22, 22])
        btn_open_folder.clicked.connect(self.open_folder)
        btn_open_folder.setToolTip('Open Lib Folder')

        #list view
        spacer = QSpacerItem(5, 5, QSizePolicy.Maximum, QSizePolicy.Minimum)
        self.view_mode = CheckBox('List')
        self.view_mode.stateChanged.connect(
            lambda: self.click_item(self.treeWidget.currentItem()))

        #search bar
        self.search_bar = LineEdit()
        self.search_bar.textChanged.connect(self.filterThumbnail)

        #add widget to search bar
        self.topBarLayout.addWidget(btn_parent_dir)
        self.topBarLayout.addWidget(self.search_bar)
        self.topBarLayout.addWidget(btn_refresh)
        self.topBarLayout.addWidget(btn_open_folder)
        self.topBarLayout.addItem(spacer)
        self.topBarLayout.addWidget(self.view_mode)

        # Adding Panel to splitter
        self.splitter.addWidget(self.leftPanel)
        self.splitter.addWidget(self.middle)
        self.splitter.addWidget(self.rightPanel)

        self.splitter.setSizes([132, 512, 256])

        self.splitter.setStretchFactor(0, 0)
        self.splitter.setStretchFactor(1, 1)
        self.splitter.setStretchFactor(2, 0)

        self.mainLayout.addWidget(self.titleBarArea)
        self.mainLayout.addWidget(self.splitter)

        #shortcut
        self.shortcut_zoom_in = QShortcut(QKeySequence("+"), self)
        self.shortcut_zoom_out = QShortcut(QKeySequence("-"), self)

        self.shortcut_zoom_in.activated.connect(self.zoom_in)
        self.shortcut_zoom_out.activated.connect(self.zoom_out)

        self.setLayout(self.mainLayout)
        self.show()

    def change_view_mode(self):
        self.click_item(self.treeWidget.currentItem)

    def batch(self):
        clear_layout(self.rightLayout)

        #self.addAssetPanel = Batch(self)

        self.rightLayout.addLayout(Batch(self))
        #def batch_fill_lib(template,files,folder = None,category = None) :
        #self.click_item(self.treeWidget.currentItem)

    def change_filter(self, index):
        print(str(self.cbox_filter.currentText()))

    def change_area(self, index):
        #self.treeWidget.clear()
        print(str(self.area.currentText()))
        if self.title:
            self.title.setText(self.area.currentText())

        #self.refresh()

    def refresh(self):
        area = str(self.area.currentText())

        if self.treeWidget and self.area and self.cbox_filter:
            if self.treeWidget.search_json.isRunning:
                self.treeWidget.search_json.terminate()
            self.treeWidget.clear()

        #filter_items = str(self.cbox_filter.currentText())

        self.treeWidget.create_widget(settings['path'])
        #self.treeWidget.create_tree(settings['path'],'Library','All')

    def open_folder(self):
        try:
            os.startfile(settings['path'])
        except:
            subprocess.Popen(['xdg-open', settings['path']])

    def add_asset(self):
        clear_layout(self.rightLayout)

        self.addAssetPanel = AddAsset(self)

        self.rightLayout.addLayout(self.addAssetPanel)

    def zoom_in(self):
        new_size = self.thumbnailList.iconSize().width()
        if not new_size > 512:
            new_size *= 1.25

        self.thumbnailList.setIconSize(QSize(new_size, new_size))
        #self.thumbnailList.setStyleSheet("QListView::item {height: %s;}"%(new_size+6))

    def zoom_out(self):
        new_size = self.thumbnailList.iconSize().width()
        if not new_size < 16:
            new_size *= 0.75

        self.thumbnailList.setIconSize(QSize(new_size, new_size))
        #self.thumbnailList.setStyleSheet("QListView::item {height: %s;}"%(new_size+6))

    # When selected of folder in the outliner
    def click_item(self, item):
        #for row in range(self.thumbnailList.rowCount()) :
        #clear_layout(self.assetLayout)
        #self.thumbnailList.clear()
        #a= TreeWidget(item.text(1))
        #self.thumbnailList.clear()
        #self.middle.addWidget(ThumbnailPanel.createWidget(item.text(1)))
        if hasattr(self, 'view_mode') and self.view_mode.isChecked():
            self.thumbnailList = TableWidget(self)
            #self.thumbnailList.horizontalHeader().setSortIndicator(1,Qt.AscendingOrder)
            #self.thumbnailList.cellClicked.connect(self.click_thumb)
            #self.thumbnailList.setRowCount(0)
        else:
            if hasattr(self.thumbnailList, "search_asset"
                       ) and self.thumbnailList.search_asset.isRunning:
                self.thumbnailList.search_asset.terminate()
                self.thumbnailList.clear()

            self.thumbnailList.search_images(item.full_path)
            #self.thumbnailList.itemClicked.connect(self.click_thumb)
            #self.thumbnailList.clear()

        #print(item.full_path)

        #self.asset_list.sort(key = lambda x : x[''])

        #self.assetLayout.addWidget(self.thumbnailList)

        if self.area.currentText() == 'Library':
            subFolder = []

    # When taping in the search bar
    def filterThumbnail(self):
        if self.thumbnailList:
            items = (self.thumbnailList.item(i)
                     for i in range(self.thumbnailList.count()))
            search = self.search_bar.text()

            for index, item in enumerate(items):
                info = item.info
                tags = [
                    t for t in info['tags'].split(',') if len(info['tags'])
                ]
                name = info['asset']

                item_visibility = filtering_keyword(name, search, tags)

                if self.view_mode.isChecked():
                    self.thumbnailList.setRowHidden(index, item_visibility)
                else:
                    self.thumbnailList.item(index).setHidden(item_visibility)

    def closeEvent(self, event):
        if self.treeWidget.search_json.isRunning:
            self.treeWidget.search_json.terminate()

        if hasattr(
                self.thumbnailList,
                "search_asset") and self.thumbnailList.search_asset.isRunning:
            self.thumbnailList.search_asset.terminate()

        self.widget_close = True
        self.deleteLater()
Exemplo n.º 18
0
class _UIElement(QObject):
    """
    Универсальный класс элемента интерфейса. Создан, потому что изначальные классы PyQt
    требуют значительной доработки и к тому же недостаточно интуитивны, легко запутаться
    в Qt-овском нагромождении из виджетов, лэйаутов, item объектов, прочей шелухи.
    Плюсы этого класса: позволяет отображать подпись над элементом,
                                  удобно включать/выключать функциональность,
                        сразу ставит виджет в центр (а не в край, чтоб потом его ещё ровнять)
                        убирает ненужные отступы между элементами
                        все последующие элементы наследуются от него
    """

    def __init__(self, widget: QWidget = None, layout: QLayout = None,
                 description: str = None, disable: bool = False, stroked: bool = False):
        """
        :param widget: класс Qt Widget, который будет отображаться как элемент интерфейса
        :param layout: класс слоя, который будет основанием, на котором будет лежать виджет
        :param description: описание или название, котороые при наличии будет отображаться над виджетом
        :param disable: опция отключения виджета при создании. По умолчанию False, т.е. виджет включён
        """
        super().__init__()

        self._inner_widget = widget
        self._layout = QVBoxLayout() if layout is None else layout
        self._layout.setContentsMargins(2, 2, 2, 2)
        if description is not None or layout is not None:
            self._out_widget = QFrame()
            if stroked:
                self._out_widget.setFrameStyle(QFrame.Plain)
            if description is not None:
                self._layout.addWidget(QLabel(description), alignment=Qt.AlignCenter)
            if widget is not None:
                self._layout.addWidget(widget)
            self._out_widget.setLayout(self._layout)
        elif widget is not None:
            self._out_widget = widget
            widget.setDisabled(disable)

    def toggle_element(self, state=None):
        if self._inner_widget is not None:
            self._inner_widget.setDisabled(self._inner_widget.isEnabled() if state is None else not state)

    def set_max_width(self, width):
        self._out_widget.setMaximumWidth(width)

    def set_max_height(self, height):
        self._out_widget.setMaximumHeight(height)

    def set_fixed_width(self, width):
        self._out_widget.setFixedWidth(width)

    def set_fixed_height(self, height):
        self._out_widget.setFixedHeight(height)

    def set_min_width(self, width):
        self._out_widget.setMinimumWidth(width)

    def set_min_height(self, height):
        self._out_widget.setMinimumHeight(height)

    def __layout__(self) -> QLayout:
        return self._out_widget.layout()

    def __widget__(self) -> QWidget:
        return self._out_widget
Exemplo n.º 19
0
class Ui_Form(object):
    def setupUi(self, Form):
        self.form = Form
        Form.setObjectName("Form")
        Form.resize(1000, 800)
        self.widget = QtWidgets.QWidget(Form)
        self.widget.setGeometry(QtCore.QRect(10, 10, 991, 30))
        self.widget.setObjectName("widget")
        self.horizontalLayout = QtWidgets.QHBoxLayout(self.widget)
        self.horizontalLayout.setContentsMargins(2, 0, 5, 0)
        self.horizontalLayout.setSpacing(2)
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.label01 = QtWidgets.QLabel(self.widget)
        self.label01.setObjectName("label01")
        self.horizontalLayout.addWidget(self.label01)
        self.input_nodenums = QtWidgets.QLineEdit(self.widget)
        self.input_nodenums.setObjectName("input_nodenums")
        self.horizontalLayout.addWidget(self.input_nodenums)
        self.label02 = QtWidgets.QLabel(self.widget)
        self.label02.setObjectName("label02")
        self.horizontalLayout.addWidget(self.label02)
        self.input_filename = QtWidgets.QLineEdit(self.widget)
        self.input_filename.setObjectName("input_filename")
        self.horizontalLayout.addWidget(self.input_filename)
        self.label03 = QtWidgets.QLabel(self.widget)
        self.label03.setObjectName("label03")
        self.horizontalLayout.addWidget(self.label03)
        self.input_sheetname = QtWidgets.QLineEdit(self.widget)
        self.input_sheetname.setObjectName("input_sheetname")
        self.horizontalLayout.addWidget(self.input_sheetname)
        self.addnode_btn = QtWidgets.QPushButton(self.widget)
        self.addnode_btn.setObjectName("addnode_btn")
        self.horizontalLayout.addWidget(self.addnode_btn)
        self.start_btn = QtWidgets.QPushButton(self.widget)
        self.start_btn.setObjectName("start_btn")
        self.horizontalLayout.addWidget(self.start_btn)
        self.layout = QVBoxLayout(self.widget)

        self.frame = QFrame(self.form)
        self.frame.setMinimumHeight(400)
        self.frame.setMaximumWidth(800)
        self.frame.setMaximumWidth(1000)
        self.frame.setMaximumHeight(2000)
        self.frame.show()

        self.node_num = 0
        self.addnode_btn.clicked.connect(self.add_node)
        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)



    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "自动画流程图工具"))
        self.label01.setText(_translate("Form", "节点个数:"))
        self.label02.setText(_translate("Form", "visio文件名:"))
        self.label03.setText(_translate("Form", "sheetname:"))
        self.addnode_btn.setText(_translate("Form", "添加节点"))
        self.start_btn.setText(_translate("Form", "开始画图"))

    def  add_node(self):
        bt = NodeWidget( self.node_num,self.frame)
        bt.move(0,80+30*self.node_num)
        print("add node ",self.node_num )
        self.node_num += 1
Exemplo n.º 20
0
def getHLine():
    devideLine = QFrame()
    devideLine.setFrameShape(QFrame.HLine)
    devideLine.setMaximumHeight(1)
    return devideLine
Exemplo n.º 21
0
class MainWindow(QMainWindow):
    """
    主窗口界面
    """

    def __init__(self, *args, **kwargs):
        super(MainWindow, self).__init__(*args, **kwargs)

        # 初始化
        self.init()
        # ui设计
        self.setup_ui()
        # 创建右键菜单
        self.create_context_menu()
        # 主框体设计
        self.set_main_form()
        # 加载qss样式
        self.load_qss()

    def init(self):
        self.setGeometry(Const.WIN_X, Const.WIN_Y, Const.WIN_WIDTH, Const.WIN_HEIGHT)
        self.setObjectName('mainWindow')
        self.setWindowIcon(QIcon("./image/Logo/logo.png"))
        self.setWindowTitle('IFR智能公式识别系统')

        # 加载图片缩放公共类
        self.imageScale = ImageScale()

    def setup_ui(self):
        """
        创建状态栏、菜单栏、工具栏
        """

        # 状态栏
        self.statusBar = QStatusBar()
        self.setStatusBar(self.statusBar)
        self.statusBar.showMessage('准备就绪', 5000)
        # self.statusBar().setStyleSheet('background-color:lightGray;')

        # 菜单栏
        self.menubar = QMenuBar()
        self.setMenuBar(self.menubar)
        # self.menuBar().setStyleSheet('background-color:lightGray;')

        # 文件
        self.fileMenu = self.menubar.addMenu('&文件(F)')

        # 调用自定义action
        self.openPimax = Action.action_b_2(self, 'openPimax', '&打开图片文件', 'Ctrl+P', '打开图片文件')
        self.openPimax.setIcon(QIcon('./image/openQpixmap.jpg'))
        self.openText = Action.action_b_2(self, 'openText', '&打开文本文件', 'Ctrl+T', '打开文本文件')
        self.openText.setIcon(QIcon('./image/openText.ico'))
        self.openFile = Action.action_b_3(self, 'openFile', '打开文件', '打开文件', self.fileMenu)
        self.openFile.addAction(self.openPimax)
        self.openFile.addAction(self.openText)

        self.openPimax.triggered.connect(lambda: self.get_image())
        self.openText.triggered.connect(lambda: self.get_text())
        self.openRecentFile = Action.action_a_2(self, 'openRecentFile', '&最近打开的文件', 'Ctrl+O', '最近打开的文件', self.fileMenu)
        # self.openRecentFile.triggered.connect(self.)
        self.save = Action.action_a_2(self, 'save', '&保存分析结果', 'Ctrl+S', '保存数据分析结果', self.fileMenu)
        # self.save.triggered.connect(self.)
        self.saveAs = Action.action_a_2(self, 'saveAs', '&另保存分析结果', 'Ctrl+Shift+S', '另保存数据分析结果', self.fileMenu)
        # self.saveAs.triggered.connect(self.)
        self.printf = Action.action_a_2(self, 'printef', '&打印分析结果', 'Ctrl+P', '打印数据分析结果', self.fileMenu)
        # self.printf.triggered.connect(self.)
        self.exitAction = Action.action_a_1(self, 'exitAction', './image/mainWindowIcon/toolBarIcon/exit.png', '&退出',
                                            'Ctrl+Q', '退出应用程序',
                                            self.fileMenu)
        self.exitAction.triggered.connect(self.close)

        # 编辑
        self.exitMenu = self.menubar.addMenu('&编辑(E)')
        #
        # ####################查找与替换####################开始
        self.search = Action.action_b_2(self, 'search', '&快速查找', 'Ctrl+F', '快速查找')
        self.replace = Action.action_b_2(self, 'replace', '&快速替换', 'Ctrl+H', '快速替换')

        # 新增二级菜单
        self.searchAndReplaceMenu = Action.action_b_3(self, 'searchAndReplaceMenu', '查找与替换', '查找与替换', self.exitMenu)
        self.searchAndReplaceMenu.addAction(self.search)
        self.searchAndReplaceMenu.addAction(self.replace)

        # self.search.triggered.connect(self.)
        # self.replace.triggered.connect(self.)

        # ####################查找与替换####################结束

        self.cut = Action.action_a_2(self, 'cut', '&剪切', 'Ctrl+X', '剪切', self.exitMenu)
        # self.cut.triggered.connect(self.)
        self.copy = Action.action_a_2(self, 'copy', '&复制', 'Ctrl+C', '复制', self.exitMenu)
        # self.copy.triggered.connect(self.)
        self.paste = Action.action_a_2(self, 'paste', '&粘贴', 'Ctrl+V', '粘贴', self.exitMenu)
        # self.paste.triggered.connect(self.)
        self.delete = Action.action_a_2(self, 'delect', '&删除', 'Del', '删除', self.exitMenu)
        # self.delect.triggered.connect(self.)
        self.selectAll = Action.action_a_2(self, 'selectAll', '&全选', 'Ctrl+Alt', '全选', self.exitMenu)
        # self.selectAll.triggered.connect(self.)

        # 视图
        self.viewMenu = self.menubar.addMenu('&视图(V)')

        self.notice = Action.action_a_2(self, 'notice', '&通知', 'Ctrl+Alt+X', '信息通知提醒', self.viewMenu)
        # self.notice.triggered.connect(self.)

        # ####################窗口管理####################开始
        self.window = Action.action_b_3(self, 'window', '&窗口', '展示一些基本窗口', self.viewMenu)

        # ####################窗口管理####################结束
        #
        #
        #
        # ####################工具栏####################开始
        self.tool = Action.action_b_3(self, 'tool', '&工具栏', '基本工具', self.viewMenu)

        self.calculator = Action.action_a_1(self, 'calculator', './image/calculator.jpg', '&计算器',
                                            'C', '计算器', self.viewMenu)
        self.calculator.triggered.connect(lambda: self.calculator_win())

        # ####################工具####################结束
        self.fullScreen = Action.action_a_2(self, 'fullScreen', '&全屏幕', 'Shift+Alt+Enter', '全屏', self.viewMenu)
        # self.fullScreen.triggered.connect(self.)
        self.propertyWindow = Action.action_a_2(self, 'propertyWindow', '&属性窗口', 'F4', '属性窗口', self.viewMenu)
        # self.propertyWindow.triggered.connect(self.)
        #

        # 分析
        self.navigateMenu = self.menubar.addMenu('&分析(N)')
        #

        # 工具
        self.toolMenu = self.menubar.addMenu('&工具(T)')
        #

        # 扩展
        self.extendMenu = self.menubar.addMenu('&扩展(X)')
        #

        # 窗口
        self.windowMenu = self.menubar.addMenu('&窗口(W)')
        #

        # 帮助
        self.helpMenu = self.menubar.addMenu('&帮助(H)')

        self.help = Action.action_a_2(self, 'help ', '&查看帮助', 'Ctrl+F1', '查看帮助', self.helpMenu)
        # self.help.triggered.connect(self.)
        # ####################菜单####################结束

        ################################################################################################################

        # ####################工具栏####################开始
        # 工具

        self.pixmapToolbar = self.addToolBar('打开图形文件')
        self.textToolbar = self.addToolBar('打开文本文件')
        self.pixmapToolbar.addAction(self.openPimax)
        self.textToolbar.addAction(self.openText)

        self.exitToolbar = self.addToolBar('退出')
        self.exitToolbar.addAction(self.exitAction)

        self.calculatorTooolbar = self.addToolBar('计算器')
        self.calculatorTooolbar.addAction(self.calculator)

        # ####################工具栏####################结束

        #  槽函数线程

    # 创建右键菜单
    def create_context_menu(self):
        """
        创建右键菜单
        :return:
        """
        self.setContextMenuPolicy(Qt.CustomContextMenu)
        self.customContextMenuRequested.connect(self.show_context_menu)

        # 创建QMenu
        self.contextMenu = QMenu(self)

        # ####################工具栏管理####################开始
        self.toolBarManagementMenu = Action.action_b_4(self, 'toolBarManagementMenu', '&工具栏管理', self.contextMenu)
        # 未完成
        # ####################工具栏管理####################结束

        self.minAtion = Action.action_a_1(self, 'minAction', './image/min.png', '&最小化', 'Ctrl+M', '最小化窗口',
                                          self.contextMenu)

        self.contextMenu.addSeparator()  # 添加分隔线

        self.cutAction = Action.action_a_2(self, 'cutAction', '&剪切', 'Ctrl+X', '剪切', self.contextMenu)
        self.copyAction = Action.action_a_2(self, 'copyAction', '&复制', 'Ctrl+C', '复制', self.contextMenu)
        self.pasteAction = Action.action_a_2(self, 'pasteAction', '&粘贴', 'Ctrl+V', '粘贴', self.contextMenu)
        self.deleteAction = Action.action_a_2(self, 'delectAction', '&删除', 'Del', '删除', self.contextMenu)
        self.selectAllAction = Action.action_a_2(self, 'selectAllAction', '&全选', 'Ctrl+Alt', '全选', self.contextMenu)

        self.contextMenu.addSeparator()  # 添加分隔线

        self.closeAction = Action.action_a_1(self, 'closeAction', './image/Exit.png', '&退出', 'Ctrl+W', '退出',
                                             self.contextMenu)

        self.minAtion.triggered.connect(self.show_mininized_window)

        self.closeAction.triggered.connect(self.quit_window)
        # self.selectAllAction.triggered.connect(self.)
        # self.cutAction.triggered.connect(self.)
        # self.copyAction.triggered.connect(self.)
        # self.pasteAction.triggered.connect(self.)
        # self.delectAction.triggered.connect(self.)

    # ****************************** 业务逻辑 *********************************
    def load_qss(self):
        """
         加载Qss样式表
        :return:
        """
        style_file = './Window/mainWindow/Qss/mainWindow.qss'
        qss_style = CommonhelperQss.read_qss(style_file)
        self.setStyleSheet(qss_style)

    def set_action_connect(self):
        """
        菜单栏、工具栏槽函数连接
        :return:
        """
        pass

    def calculator_win(self):
        """
        加载计算器窗口
        :return:
        """
        self.calculator_Win = Calculatormainwindow()
        self.calculator_Win.show()

    def set_main_form(self):
        """
        窗体布局以及主框体设计
        :return:
        """
        # 主框体
        self.mainSpiltter = QSplitter(Qt.Vertical)
        self.mainSpiltter.setObjectName('mainSpiltter')

        self.mainSpiltterLayout = QVBoxLayout()

        # 设置主窗口中心窗体
        self.setCentralWidget(self.mainSpiltter)

        # *******工作区间*******
        self.workWidget = QSplitter()
        self.workWidget.setObjectName('workWidget')
        self.mainSpiltter.addWidget(self.workWidget)

        self.workWidgetLayout = QHBoxLayout()
        self.workWidget.setLayout(self.workWidgetLayout)

        self.leftWidget = QFrame()
        self.leftWidget.setObjectName('leftWidget')
        self.leftWidget.setFrameShape(QFrame.StyledPanel)
        self.leftWidget.setMaximumWidth(230)

        self.leftWidgetLayout = QVBoxLayout()
        self.leftWidgetLayout.setContentsMargins(0, 0, 0, 0)
        self.leftWidget.setLayout(self.leftWidgetLayout)

        # self.hideBtn = QLabel()
        # self.hideBtn.setObjectName('hideBtn')
        # self.hideBtn.setPixmap(QPixmap('./image/mainWindowIcon/showAndHideIcon/hide0.ico'))
        #
        # self.showBtn = QLabel()
        # self.showBtn.setObjectName('showBtn')
        # self.showBtn.setPixmap(QPixmap('./image/mainWindowIcon/showAndHideIcon/show0.ico'))

        # 存放按钮
        self.widget = QWidget()
        self.widget.setObjectName('widget')
        self.leftWidgetLayout.addWidget(self.widget)

        pixmap = self.imageScale.pixmap_scale('./image/Logo/logo0.png', 204, 80)

        self.logoIamgeLabel = QLabel(self.widget)
        self.logoIamgeLabel.setObjectName('logoImageLabel')
        self.logoIamgeLabel.setPixmap(pixmap)

        self.widgetLayout = QGridLayout()
        self.widget.setLayout(self.widgetLayout)

        self.widgetLayout.addWidget(self.logoIamgeLabel, 0, 1)

        # 多界面
        # QListWidget + QStackedWidget实现
        self.leftListWidget = QListWidget()  # 左侧选项列表
        self.leftListWidget.setObjectName('leftListWidget')
        self.rightWidget = QStackedWidget()  # 右侧框体
        self.rightWidget.setObjectName('rightWidget')

        self.leftWidgetLayout.addWidget(self.leftListWidget)

        self.workWidgetLayout.addWidget(self.leftWidget)
        self.workWidgetLayout.addWidget(self.rightWidget)

        # ********左侧选项列表布局以及设置******************************
        # 设置左侧选项列表大小
        self.leftListWidget.setMinimumWidth(Const.LEFTWIDGET_WIDTH)
        # 左侧选项列表与右侧框体的index对应绑定
        self.leftListWidget.currentRowChanged.connect(self.rightWidget.setCurrentIndex)
        # 去掉边框
        self.leftListWidget.setFrameShape(QListWidget.NoFrame)
        # 隐藏滚动条
        self.leftListWidget.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
        self.leftListWidget.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)

        list_str = ['智能识别', '公式生成器', '学习资源区', '设置', '关于']

        # 左侧选项添加
        for i in range(5):
            self.item = QListWidgetItem(list_str[i], self.leftListWidget)
            self.item.setSizeHint(QSize(Const.ITEM_WIDTH, Const.ITEM_HEIGHT))
            # 居中显示
            self.item.setTextAlignment(Qt.AlignCenter)

        # 设置默认选中item[1]
        self.leftListWidget.setCurrentRow(0)

        # ********右侧主框体布局以及设置**********************************
        self.rightForm1 = RightForm1()
        self.rightForm2 = RightForm2()
        self.rightForm3 = RightForm3()
        self.rightForm4 = RightForm4()
        self.rightForm5 = RightForm5()
        self.rightWidget.addWidget(self.rightForm1)
        self.rightWidget.addWidget(self.rightForm2)
        self.rightWidget.addWidget(self.rightForm3)
        self.rightWidget.addWidget(self.rightForm4)
        self.rightWidget.addWidget(self.rightForm5)

        # #############################################################
        # 消息通知框
        self.messageInform = MesageFrame()
        self.messageInform.setObjectName('messageInform')
        # 消息通知框默认隐藏
        self.messageInform.hide()

        self.mainSpiltter.addWidget(self.messageInform)

        # *****侧边栏*****
        # 右侧边栏
        self.rightBar = QFrame()
        self.rightBar.setObjectName('rightBar')
        self.rightBar.setFixedWidth(35)
        self.rightBar.setFrameShape(QFrame.StyledPanel)

        self.rightBarLayout = QVBoxLayout()
        self.rightBar.setLayout(self.rightBarLayout)

        self.workWidgetLayout.addWidget(self.rightBar)

        # 右侧边栏控件

        # 右侧边栏添加控件

        # 下侧边栏
        self.bottomBar = QFrame()
        self.bottomBar.setObjectName('bottomBar')
        self.bottomBar.setMaximumHeight(35)
        self.bottomBar.setFrameShape(QFrame.StyledPanel)

        self.bottomBarLayout = QHBoxLayout()
        self.bottomBarLayout.setAlignment(Qt.AlignRight)  # 右对齐
        self.bottomBar.setLayout(self.bottomBarLayout)

        self.mainSpiltter.addWidget(self.bottomBar)

        # 下侧边栏控件
        # 留白控件
        blank = QLabel(self.bottomBar)
        blank.setObjectName('blank')

        self.informText = QLabel(self.bottomBar)
        self.informText.setObjectName('informText')
        self.informText.setText('通知')

        self.informBtn = QPushButton(self.bottomBar)
        self.informBtn.setObjectName('informBtn')
        self.informBtn.resize(QSize(35, 35))
        self.informBtn.setIcon(QIcon('./image/mainWindowIcon/messageBarBtnIcon/inform0.png'))
        self.informBtn.clicked.connect(lambda: self.open_inform_frame())

        # 下侧边栏添加控件

        self.bottomBarLayout.addWidget(self.informBtn)
        self.bottomBarLayout.addWidget(self.informText)
        self.bottomBarLayout.addWidget(blank)

    # ****************************业务逻辑******************************
    # 右键菜单
    def show_context_menu(self):
        """
        右键点击时调用的函数
        :return:
        """
        # 显示菜单前,将它移动到鼠标点击的位置
        self.contextMenu.exec_(QCursor.pos())

    # 最小化窗口
    def show_mininized_window(self):
        """
        :return:
        """
        self.showMinimized()

    # 最大化窗口
    def show_maximized_window(self):
        """

        :return:
        """
        self.showMaximized()

    # 复原窗口
    def show_restore_window(self):
        """

        :return:
        """
        if self.isMaximized():
            self.showNormal()
        else:
            self.showMaximized()

    # 关闭窗口
    def quit_window(self):
        """

        :return:
        """
        self.close()

    # 打开文件
    def get_image(self):

        """
            getOpenFileName():返回用户所选择文件的名称,并打开该文件
            第一个参数用于指定父组件
            第二个参数指定对话框标题
            第三个参数指定目录
            第四个参数是文件扩展名过滤器
        """
        pass
        # fname, _ = QFileDialog.getOpenFileName(self, '选择图形文件', 'C:\\', "*.jpg *.gif *.png")
        # self.pixmapLabel.setPixmap(QPixmap(fname))

    def get_text(self):
        """

        :return:
        """
        pass
        # # 初始化实例,并设置一些参数
        # # textDialog = QFileDialog()
        # # textDialog.setFileMode(QFileDialog.AnyFile)
        # # textDialog.setFilter(QDir.Files)
        # textDialog = QFileDialog.getOpenFileName(self, '选择文本文件', 'C:\\', "*.txt *.doc *.docx")
        # # 当选择器关闭的时候
        # if textDialog.exec_():
        #     # 拿到所选择的文本
        #     filenames = textDialog.selectedFiles()
        #     # 读取文本内容设置到textEdit中
        #     f = open(filenames[0], 'r')
        #     with f:
        #         data = f.read()
        #         self.textEdit.setText(data)

    def open_inform_frame(self):
        self.messageInform.show()
Exemplo n.º 22
0
    def __init__(self, parent, title="Title", width=500, height=180):
        self.parent = parent
        self.dragPosition = None
        self.width = width
        self.height = height
        super().__init__(parent)
        self.setWindowFlags(Qt.FramelessWindowHint)

        self.setAttribute(Qt.WA_TranslucentBackground)

        self.gap = 10
        self.center(self.width + self.gap, self.height + self.gap)
        self.setAcceptDrops(True)
        layout = QVBoxLayout()
        layout.setSpacing(0)
        layout.setAlignment(Qt.AlignTop)
        layout.setContentsMargins(0, 0, 0, 0)
        # Title
        title = QLabel(title)
        title.setObjectName('title')

        def trigger_close(_):
            self.close()

        close_btn = Builder().text('x').name('close_btn').click(
            trigger_close).build()
        header = QHBoxLayout()
        header.addWidget(title)
        header.addStretch(1)
        header.addWidget(close_btn)
        self.close_btn = close_btn

        dlgHeader = QFrame()
        dlgHeader.setObjectName('header')
        dlgHeader.setMaximumWidth(width)
        dlgHeader.setLayout(header)
        layout.addWidget(dlgHeader)
        widget = QWidget(self)
        self.main = self.ui(widget)
        widget.setObjectName('main')
        widget.setLayout(self.main)
        widget.setMaximumWidth(width)
        layout.addWidget(widget)

        _main = QWidget()
        _main.setContentsMargins(0, 0, 0, 10)
        _main.setLayout(layout)
        _main.setStyleSheet(self.style())
        _main.setWindowOpacity(0.5)

        _main_layout = QStackedLayout()
        _main_layout.setContentsMargins(20, 20, 20, 20)
        _main_layout.setAlignment(Qt.AlignCenter)
        _main_layout.setStackingMode(QStackedLayout.StackAll)

        _backgound = QFrame()
        _backgound.setMinimumWidth(width)
        _backgound.setMinimumHeight(height)
        _backgound.setMaximumWidth(width)
        _backgound.setMaximumHeight(height)
        _backgound.setStyleSheet("background: #fafafa; border-radius:5px;")

        if not app.is_windows():
            _main_layout.addWidget(_backgound)
        _main_layout.addWidget(_main)

        self.setLayout(_main_layout)

        self.effect = QGraphicsDropShadowEffect(_backgound)
        self.effect.setOffset(0, 0)
        self.effect.setBlurRadius(30)
        # self.effect.setEnabled(False)
        _backgound.setGraphicsEffect(self.effect)
Exemplo n.º 23
0
    def prepare_gui(self):
        self.setWindowTitle('inzynierka')
        self.setBaseSize(1200, 800)

        left_panel = QVBoxLayout()
        left_panel.setAlignment(Qt.AlignTop)

        left_part = QVBoxLayout()
        left_part.addWidget(self.algorithmLabel)

        checkboxes = QVBoxLayout()
        checkboxes.addWidget(self.simpleCNN)
        checkboxes.addWidget(self.knn)
        checkboxes.addWidget(self.customCNN)
        left_part.addLayout(checkboxes)

        left_part.addWidget(self.parameterLabel)
        left_part.addWidget(self.parameter)
        left_part.addWidget(self.errorLabel)

        cnnParameters = QGridLayout()
        cnnParameters.addWidget(self.optimizerLabel, 0, 0)
        cnnParameters.addWidget(self.optimizer, 0, 1)
        cnnParametersFrame = QFrame()
        cnnParametersFrame.setLayout(cnnParameters)
        left_part.addWidget(cnnParametersFrame)

        left_panel.addLayout(left_part)

        right_panel = QGridLayout()
        label1 = QLabel('Graphs for your algoritm')
        right_panel.addWidget(label1, 0, 0)
        right_panel.addWidget(self.graphs, 1, 0)

        self.graphs.setTabEnabled(1, False)
        self.graphs.setTabEnabled(2, False)

        top_layout = QHBoxLayout()
        top_layout.addLayout(left_panel)
        top_layout.addLayout(right_panel)
        topFrame = QFrame()
        topFrame.setLayout(top_layout)
        topFrame.setMinimumHeight(600)

        bottom_layout = QHBoxLayout()
        buttons = QVBoxLayout()
        buttons.addWidget(self.createButton)
        buttons.addWidget(self.trainButton)
        buttons.addWidget(self.evaluateButton)
        buttons.addWidget(self.loadModelButton)
        buttons.addWidget(self.saveModelButton)
        bottom_layout.addLayout(buttons)
        bottom_layout.addWidget(self.consolePrint)
        bottomFrame = QFrame()
        bottomFrame.setLayout(bottom_layout)
        bottomFrame.setMaximumHeight(300)

        main_layout = QGridLayout()
        main_layout.addWidget(topFrame, 0, 0)
        main_layout.addWidget(bottomFrame, 1, 0)

        main_widget = QWidget()
        main_widget.setLayout(main_layout)
        self.setCentralWidget(main_widget)
Exemplo n.º 24
0
    class HeaderFrame(QFrame):
        """ Clickable frame with title. """

        class AbstractHeaderFrameItem(QFrame):

            def __init__(self, parent):
                super(__class__, self).__init__(parent)
                self.setContentsMargins(0, 0, 0, 0)
                self.setLayout(QHBoxLayout())
                self.layout().setContentsMargins(0, 0, 0, 0)
                self.layout().setSpacing(0)

            def clearLayout(self):
                while self.layout().count():
                    child = self.layout().takeAt(0)
                    if child.widget():
                        child.widget().deleteLater()

            def setCentralWidget(self, widget: QWidget):
                self.clearLayout()
                self.layout().addWidget(widget)

            def refresh(self):
                pass

        class VSepItem(AbstractHeaderFrameItem):

            def __init__(self, parent):
                super(__class__, self).__init__(parent)
                self.setCentralWidget(VSep(self))

        class HSpacerItem(AbstractHeaderFrameItem):

            def __init__(self, parent):
                super(__class__, self).__init__(parent)
                self.setCentralWidget(HSpacer(self))

        arrowClicked = pyqtSignal()
        upButtonClicked = pyqtSignal()
        downButtonClicked = pyqtSignal()
        configButtonClicked = pyqtSignal()
        closeButtonClicked = pyqtSignal()

        def __init__(self, parent: 'ui.widget.CollapsibleFrame'):
            super(__class__, self).__init__(parent)

            self._parent = parent
            self.setMinimumHeight(26)
            self.setMaximumHeight(26)
            self.indicateError(False)

            self._hlayout = QHBoxLayout()
            self._hlayout.setContentsMargins(0, 0, 0, 0)
            self._hlayout.setSpacing(0)

            self._arrow = None

            self._hlayout.addWidget(self._init_header_frame(parent.isCollapsed()))
            self.setLayout(self._hlayout)

        def _init_header_frame(self, collapsed: bool):
            self._frm_header = QFrame(self)
            self._frm_header.setMinimumHeight(24)
            self._frm_header.setMaximumHeight(24)
            frm_header_layout = QHBoxLayout(self)
            frm_header_layout.setContentsMargins(0, 0, 0, 0)
            frm_header_layout.addWidget(self._init_arrow(collapsed))
            background_color = self._frm_header.palette().color(self._frm_header.backgroundRole())
            self._frm_header.setStyleSheet("QFrame { border:0px; background:" + background_color.darker(96).name() + "; }")
            self._frm_header.setLayout(frm_header_layout)
            return self._frm_header

        def _init_arrow(self, collapsed):
            self._arrow = CollapsibleFrame.Arrow(self, collapsed=collapsed)
            self._arrow.setMinimumWidth(24)
            self._arrow.setMaximumWidth(24)
            self._arrow.setStyleSheet("border:0px")
            return self._arrow

        def addWidget(self, header_item: AbstractHeaderFrameItem):
            self._frm_header.layout().addWidget(header_item)

        def refresh(self):
            """ Refreshes the header model (e.g. line-count, character-count, etc.). """
            for i in range(self._frm_header.layout().count()):
                widget = self._frm_header.layout().itemAt(i).widget()
                if isinstance(widget, CollapsibleFrame.HeaderFrame.AbstractHeaderFrameItem):
                    widget.refresh()

        def indicateError(self, status: bool):
            """ Indicates an error by painting the title-border red. Otherweise black. """
            if status:
                self.setStyleSheet("QFrame { border:1px solid red; }")
            else:
                self.setStyleSheet("QFrame { border:1px solid rgb(41, 41, 41); }")

        def mouseReleaseEvent(self, event):
            if self.underMouse() and event.button() == QtCore.Qt.LeftButton:
                # The arrow (or something non-button like) was clicked
                self.arrowClicked.emit()
            return super(CollapsibleFrame.HeaderFrame, self).mousePressEvent(event)
Exemplo n.º 25
0
    def add_menu(self):
        layout = QVBoxLayout()
        frame = QFrame()

        license_plate_label = QLabel("License Plate: ")
        license_plate_label.setStyleSheet(
            "color:#fff;padding:8px 0px;font-size:20px"
        )
        brand_name_label = QLabel("Brand: ")
        brand_name_label.setStyleSheet(
            "color:#fff;margin-top:32px;padding:8px 0px;font-size:20px"
        )
        fuel_type_label = QLabel("Fuel: ")
        fuel_type_label.setStyleSheet(
            "color:#fff;margin-top:32px;padding:8px 0px;font-size:20px"
        )

        license_plate_input = QLineEdit()
        license_plate_input.setStyleSheet(
            "color:#fff;padding:8px 0px;font-size:20px"
        )
        brand_name_input = QLineEdit()
        brand_name_input.setStyleSheet(
            "color:#fff;padding:8px 0px;font-size:20px"
        )
        fuel_type_input = QComboBox()
        fuel_type_input.setStyleSheet(
            "color:#fff;padding:8px 0px;font-size:20px;border:1px solid white"
        )
        fuel_type_input.addItem("Gasoline")
        fuel_type_input.addItem("Diesel")
        fuel_type_input.addItem("Hydrogen")
        fuel_type_input.addItem("Electric")

        button = QPushButton("Check-in")
        button.setStyleSheet(
            "color:#fff;margin-top:32px;padding:8px 0px;font-size:20px;background:blue;border:1px solid white"
        )

        layout.addWidget(license_plate_label)
        layout.addWidget(license_plate_input)
        layout.addWidget(brand_name_label)
        layout.addWidget(brand_name_input)
        layout.addWidget(fuel_type_label)
        layout.addWidget(fuel_type_input)
        layout.addWidget(button)

        layout.setContentsMargins(0, 0, 0, 0)
        frame.setMinimumHeight(self.height())
        frame.setMinimumWidth(self.width())
        frame.setMaximumHeight(self.width())
        frame.setMaximumWidth(self.width())

        layout.addStretch()
        frame.setLayout(layout)
        button.clicked.connect(
            lambda: self.add_car_db(
                license_plate_input.text(),
                brand_name_input.text(),
                fuel_type_input.currentText(),
            )
        )
        self.vertical_2.addWidget(frame)