Exemplo n.º 1
0
    def prepare_layout(self):
        hbox_layout = QHBoxLayout()
        hbox_layout.setAlignment(QtCore.Qt.AlignVCenter)
        self.setLayout(hbox_layout)

        # CIRCLE IMAGE
        tab_image = QFrame()
        tab_image.setObjectName("TabImage")
        tab_image.setFixedSize(35, 35)
        tab_image.setStyleSheet(
            "QFrame#TabImage {background-image: url(Resources/images/icons/icon-rounded.png);}"
        )
        hbox_layout.addWidget(tab_image)

        # TEXT
        label = QLabel()
        label.setText(self.label_text)
        label.setFixedWidth(100)
        hbox_layout.addWidget(label)

        # ARROW IMAGE
        tab_image = QFrame()
        tab_image.setObjectName("ArrowImage")
        tab_image.setFixedSize(25, 25)
        tab_image.setStyleSheet(
            "QFrame#ArrowImage {background-image: url(Resources/images/icons/icon-arrow.png);}"
        )
        hbox_layout.addWidget(tab_image)
Exemplo n.º 2
0
    def _create_pixel(self, color):
        """
		[description]

		**Arguments:**

			:``color``: `[type]` [description]

		**Keword Arguments:**

			None

		**Returns:**

			:``[type]``: [description]

		**Author:**

			Chris Bruce, [email protected], 12/3/2018
		"""

        pixel = QFrame()
        pixel.setFixedSize(QSize(self.pixel_size, self.pixel_size))
        pixel.setFrameShape(QFrame.Box)
        pixel.setFrameShadow(QFrame.Raised)
        pixel.setLineWidth(0)
        pixel.setMidLineWidth(self.pixel_size / 8)

        pixel.setStyleSheet("background-color: rgb{}".format(color))

        return pixel
Exemplo n.º 3
0
def draw_boarder(parent, width, height):
    frame = QFrame()
    frame.setFixedSize(int(width), int(height))
    frame.setFrameShape(QFrame.StyledPanel)
    frame.setLineWidth(2)
    frame.setContentsMargins(5, 5, 5, 5)
    parent.addWidget(frame)

    return frame
Exemplo n.º 4
0
class DialogWindow(QWidget):
    def __init__(self):
        super().__init__()

        self.initUI()

    def initUI(self):

        grid = QGridLayout()
        grid.setSpacing(10)

        col = QColor(0, 0, 0)

        self.btn = QPushButton('Dialog')
        # self.btn.move(20, 20)
        self.btn.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
        self.btn.clicked.connect(self.showDialog)

        self.le = QLineEdit()

        self.frm = QFrame()
        self.frm.setStyleSheet("QWidget {background-color: %s}" % col.name())
        self.frm.setFixedSize(200, 100)

        self.lbl = QLabel('Knowledge only matters')

        grid.addWidget(self.btn, 1, 0)
        grid.addWidget(self.le, 1, 1)
        grid.addWidget(self.lbl, 2, 0)
        grid.addWidget(self.frm)
        self.setLayout(grid)

        self.setGeometry(300, 300, 290, 180)
        self.setWindowTitle("Dialog")
        self.show()

    def showDialog(self):

        text, ok = QInputDialog.getText(self, 'Input Dialog',
                                        'Ennter your name:')
        #  The first string is a dialog title,
        # the second one is a message within the dialog.
        if ok:
            self.le.setText(str(text))
        else:
            col = QColorDialog.getColor()

            if col.isValid():
                self.frm.setStyleSheet("QWidget {background-color: %s}" %
                                       col.name())
            else:
                font, ok = QFontDialog.getFont()
                if ok:
                    self.lbl.setFont(font)
Exemplo n.º 5
0
    def set_new_pdf(self, files):
        """
        Adds the files from the list onto the UI by creating the necessary buttons, layouts and Frames

        :param files: List of pdf names in the form of folder/filename.pdf
        :return: Nothing
        """
        for file in files:
            self.pdf_files.append(file)

            # This layout is used to place the up/down button on top of each other
            up_down_layout = QVBoxLayout()
            up_button = QPushButton("\u2303")
            up_button.setFixedSize(self.move_button_size)
            down_button = QPushButton("\u2304")
            down_button.setFixedSize(self.move_button_size)

            up_button.clicked.connect(self.move_up)
            down_button.clicked.connect(self.move_down)

            self.up_button_list.append(up_button)
            self.down_button_list.append(down_button)

            up_down_layout.addWidget(up_button)
            up_down_layout.addWidget(down_button)

            up_down_layout.setSpacing(1)

            # The foldername isn't displayed on the label
            pdf_name = os.path.split(file)[1]
            label = QLabel(pdf_name)

            main_layout = QHBoxLayout()
            main_layout.setContentsMargins(0, 0, 0, 0)

            width = self.widgets.MERGE_LeftLayout.geometry().width()
            height = self.move_button_size.height() * 2 + 5

            new_frame = QFrame()
            new_frame.setContentsMargins(0, 0, 0, 0)
            new_frame.setFixedSize(QSize(width, height))
            new_frame.setLayout(main_layout)
            new_frame.setFrameStyle(QFrame.WinPanel | QFrame.Plain)

            self.frame_list.append(new_frame)

            main_layout.addLayout(up_down_layout)
            main_layout.addWidget(label)

            # because of spacer at the bottom
            self.widgets.MERGE_PDFsVLayout.insertWidget(
                len(self.up_button_list) - 1, new_frame)
Exemplo n.º 6
0
    def initUI(self):
        frame = QFrame(self)
        frame.setFrameShape(QFrame.Box)
        frame.setFrameShadow(QFrame.Sunken)
        frame.setAutoFillBackground(True)
        frame.setFixedSize(450, 500)
        frame.move(0, 0)

        label = QLabel(frame)
        label.setPixmap(QPixmap("Imagenes/siacle.jpg").scaled(447, 447, Qt.KeepAspectRatio,
                                                              Qt.SmoothTransformation))
        label.move(1, 1)

        botonConfigurar = QPushButton("Информация", frame)
        botonConfigurar.setFixedSize(430, 32)
        botonConfigurar.move(10, 457)

        botonConfigurar.clicked.connect(self.Configuracion)
Exemplo n.º 7
0
    def findText(self):
        def Find():
            flag = None
            if r1.isChecked():
                self.form_widget.tab.currentWidget().findFirst(
                    l.text(), True, cs.isChecked(), True, False, False)
                flag = self.form_widget.tab.currentWidget().findNext()
            elif r2.isChecked():
                flag = self.form_widget.tab.currentWidget().findFirst(
                    l.text(), True, cs.isChecked(), True, False)
            if not flag:
                QMessageBox.information(self, 'TextPad', 'Match not found',
                                        QMessageBox.Ok, QMessageBox.Ok)

        d = QDialog(self)
        d.setWindowTitle('Find')
        d.setWindowIcon(QIcon('icon.png'))
        d.setFixedSize(300, 130)

        label = QLabel("What to find", d)
        label.move(10, 5)
        l = QLineEdit(d)
        l.move(100, 5)
        b1 = QPushButton("Find Next", d)
        b1.move(210, 5)
        b1.clicked.connect(Find)
        b2 = QPushButton("Cancel", d)
        b2.move(210, 35)
        b2.clicked.connect(d.close)
        cs = QCheckBox("Case sensitive", d)
        cs.move(10, 62)
        f = QFrame(d)
        f.setFixedSize(120, 40)
        f.move(120, 59)
        f.setToolTip('Direction')
        r1 = QRadioButton("Up", f)
        r1.move(5, 5)
        r2 = QRadioButton("Down", f)
        r2.setChecked(True)
        r2.move(55, 5)
        d.show()
Exemplo n.º 8
0
def add_price_box(widget, title, box_width=307, box_height=37, space=28):
    frame = QFrame(widget)
    frame.setFixedSize(box_width, box_height)
    frame_layout = add_layout(frame, HORIZONTAL, space=space)

    button = add_button(frame)
    frame_layout.addWidget(button)

    box = QFrame(frame)
    frame_layout.addWidget(box)
    box_layout = add_layout(box, HORIZONTAL, l_m=9, r_m=25)

    title = add_label(box, title)
    box_layout.addWidget(title)

    spacer = QSpacerItem(0, 0, QSizePolicy.Expanding, QSizePolicy.Minimum)
    box_layout.addItem(spacer)

    value = add_label(box, "0 credit / Hr")
    box_layout.addWidget(value)

    return frame, box, button
Exemplo n.º 9
0
class QLevelViewer(QWidget):
    onLevelClicked = pyqtSignal()

    def __init__(self,
                 model: GameControllerModel,
                 level_num=0,
                 level_name=None,
                 parent=QWidget):
        super(QWidget, self).__init__()
        self.model = model
        self.lblNumber = QLabel()
        self.lblName = QLabel()
        self.frame = QFrame()
        self.level_name = level_name
        self.level_num = level_num
        self._setupUI()
        self.changeLevel(level_num, level_name)
        self.isClickable = False
        self.setClickable(self.isClickable)

    def _getColorByLevel(self, level_name: str):
        if level_name == "intro":
            return (247, 181, 41)
        elif level_name == "normal":
            return (23, 107, 239)
        elif level_name == "heal":
            return (23, 156, 82)
        elif level_name == "boss":
            return (255, 62, 48)
        elif level_name == "final_boss":
            return (127, 0, 0)
        else:
            return (255, 255, 255)

    def _changeLevelColor(self):
        level_color = self._getColorByLevel(self.level_name)
        self.frame.setStyleSheet(
            "background-color: rgb({}, {}, {}); border-radius: 5px;".format(
                level_color[0], level_color[1], level_color[2]))

    def changeLevel(self, newlevel: int, level_name=None):
        self.level_num = newlevel
        if level_name is not None:
            self.level_name = level_name
        else:
            for i, v in self.model.getLevelsNames().items():
                if i == newlevel:
                    self.level_name = v
                    break
        self.lblName.setText(self.level_name)
        self.lblNumber.setText(str(newlevel))
        self._changeLevelColor()

    def onSelfClicked(self, event):
        self.onLevelClicked.emit()

    def setClickable(self, isClickable: bool):
        self.isClickable = isClickable
        self.updateClickableUi(self.isClickable)

    def updateClickableUi(self, can_click):
        self.lblNumber.blockSignals(not can_click)
        self.lblName.blockSignals(not can_click)
        self.frame.blockSignals(not can_click)
        if can_click:
            self.lblNumber.setCursor(QCursor(QtCore.Qt.PointingHandCursor))
            self.lblName.setCursor(QCursor(QtCore.Qt.PointingHandCursor))
            self.frame.setCursor(QCursor(QtCore.Qt.PointingHandCursor))
        else:
            self.lblNumber.setCursor(QCursor(QtCore.Qt.ArrowCursor))
            self.lblName.setCursor(QCursor(QtCore.Qt.ArrowCursor))
            self.frame.setCursor(QCursor(QtCore.Qt.ArrowCursor))

    def _setupUI(self):
        self.frame.setAttribute(QtCore.Qt.WA_StyledBackground, True)
        self.frame.setFixedSize(80, 80)
        self.frame.setGeometry(0, 0, 0, 0)
        self.frame.mousePressEvent = self.onSelfClicked
        font = QtGui.QFont()
        font.setPointSize(15)
        self.lblNumber.setFont(font)
        self.lblNumber.setAlignment(Qt.AlignCenter)
        self.lblNumber.mousePressEvent = self.onSelfClicked
        font_name = QtGui.QFont()
        font_name.setPointSize(15)
        self.lblName.setFont(font_name)
        self.lblName.setAlignment(QtCore.Qt.AlignCenter)
        self.lblName.mousePressEvent = self.onSelfClicked

        frame_lay = QVBoxLayout()
        frame_lay.addWidget(self.lblNumber)
        frame_lay.addWidget(self.lblName)
        self.frame.setLayout(frame_lay)
        fram_lay = QHBoxLayout()
        fram_lay.addWidget(self.frame)
        self.setLayout(fram_lay)

        self.model.engineStatechanged.connect(self.onPlayStateChanged)

    def onPlayStateChanged(self, newState: EngineState):
        self.updateClickableUi(self.isClickable
                               and (not newState == EngineState.Playing))
Exemplo n.º 10
0
    def prepare_layout(self):
        vbox_main_layout = QVBoxLayout()
        vbox_main_layout.setAlignment(QtCore.Qt.AlignTop)
        vbox_main_layout.setContentsMargins(0, 0, 0, 0)
        vbox_main_layout.setSpacing(0)

        self.setLayout(vbox_main_layout)

        # TITLE BAR
        title_bar = QFrame()
        title_bar.setFixedHeight(24)
        vbox_main_layout.addWidget(title_bar)

        # TABS
        hbox_tab_layout = QHBoxLayout()
        hbox_tab_layout.setAlignment(QtCore.Qt.AlignLeft)
        vbox_main_layout.addLayout(hbox_tab_layout)
        tab_texts = ["Preparing", "Material", "File", "Layers", "Control", "Generation"]
        for tab_text in tab_texts:
            progress_tab = CTabPivot(tab_text)
            progress_tab.clicked.connect(self.tab_clicked)
            progress_tab.setFixedSize(200, 56)
            hbox_tab_layout.addWidget(progress_tab)
            hbox_tab_layout.addSpacing(1)

        # CONTENT VIEW
        content_frame = QFrame()
        content_frame.setFixedHeight(1080-56-24)
        hbox_content_layout = QHBoxLayout()
        hbox_content_layout.setAlignment(QtCore.Qt.AlignLeft)
        hbox_content_layout.setContentsMargins(0, 0, 12, 12)
        content_frame.setLayout(hbox_content_layout)
        vbox_main_layout.addWidget(content_frame)

        # LEFT MENU
        vbox_left_menu_layout = QVBoxLayout()
        vbox_left_menu_layout.setAlignment(QtCore.Qt.AlignVCenter)
        hbox_content_layout.addLayout(vbox_left_menu_layout)

        # for i in range(8):
        #     left_menu_button = QFrame()
        #     button_name = "LeftMenuButton" + str(i+1)
        #     button_icon_path = "url(Resources/images/icons/icon-%d.png)" % (i+1)
        #     left_menu_button.setObjectName(button_name)
        #     left_menu_button.setFixedSize(48, 48)
        #     left_menu_button.setStyleSheet("""QFrame#%s {background-image: %s;}
        #                                     QFrame#%s:pressed {background-image: url(Resources/images/icons/icon-1.png)
        #                                     """ % (button_name, button_icon_path, button_name))
        #     vbox_left_menu_layout.addWidget(left_menu_button)
        #     vbox_left_menu_layout.addSpacing(1)

        for i in range(8):
            left_menu_button = QPushButton()
            button_name = "LeftMenuButton" + str(i+1)
            button_icon_path = "url(Resources/images/icons/icon-%d.png)" % (i+1)


            left_menu_button.setObjectName(button_name)
            left_menu_button.setFixedSize(48, 48)
            left_menu_button.setIconSize(QSize(46, 46))
            left_menu_button.setStyleSheet("""QPushButton#%s {background-image: %s;}
                                             QPushButton#%s:pressed {background-image: %s;}""" % (button_name, button_icon_path, button_name, button_icon_path))
            vbox_left_menu_layout.addWidget(left_menu_button)
            vbox_left_menu_layout.addSpacing(1)


        # GRAPH VIEW
        graph_frame = QFrame()
        graph_frame.setFixedSize(1600, 1080-56-24)
        hbox_content_layout.addWidget(graph_frame)


        # BUTTON
        button = QPushButton()
        button.setText("Generation")
        button.setFixedSize(200, 50)
        button.setStyleSheet("""QPushButton { background-color: orange;
                                               color: white;
                                               border-width: 2px;
                                               border-radius: 15px;
                                               padding: 4px;
                                               font-family: Comic Sans MS;
                                               font-size: 12px }
                                 QPushButton:pressed {background-color: rgb(200, 200, 200)}""")
        hbox_content_layout.addWidget(button, alignment = QtCore.Qt.AlignBottom)
Exemplo n.º 11
0
    def __init__(self, parent=None):
        QWidget.__init__(self, parent)

        self.interface_lng_val = parent.interface_lng_val
        self.con = parent.con
        self.full_dir = parent.full_dir
        self.par = parent

        flag = False
        if 'mirrorMeshDict_x' in self.con.tables():
            flag = True
            query = QtSql.QSqlQuery()
            query.exec("SELECT * FROM mirrorMeshDict_x")

            if query.isActive():
                query.first()

                name_list = []
                value_list = []

                while query.isValid():
                    name_res = query.value('name')
                    value_res = query.value('value')

                    name_list.append(name_res)
                    value_list.append(value_res)

                    query.next()

            self.data_reprint()

        main_lbl = QLabel()

        # planeType
        planeType_lbl = QLabel()
        planeType_hbox = QHBoxLayout()
        self.planeType_edit = QComboBox()
        self.planeType_edit.setFixedSize(150, 25)
        planeType_list = ["pointAndNormal", "demo"]
        self.planeType_edit.addItems(planeType_list)
        planeType_hbox.addWidget(planeType_lbl)
        planeType_hbox.addWidget(self.planeType_edit)

        #pointAndNormalDict
        pAND_lbl = QLabel()

        #point
        point_lbl = QLabel()
        self.x1 = QLineEdit()
        self.x1.setFixedSize(50, 25)
        self.y1 = QLineEdit()
        self.y1.setFixedSize(50, 25)
        self.z1 = QLineEdit()
        self.z1.setFixedSize(50, 25)
        point_hbox = QHBoxLayout()
        point_hbox.addWidget(point_lbl)
        point_hbox.addWidget(self.x1)
        point_hbox.addWidget(self.y1)
        point_hbox.addWidget(self.z1)

        #normal
        normal_lbl = QLabel()
        self.x2 = QLineEdit()
        self.x2.setFixedSize(50, 25)
        self.y2 = QLineEdit()
        self.y2.setFixedSize(50, 25)
        self.z2 = QLineEdit()
        self.z2.setFixedSize(50, 25)

        normal_hbox = QHBoxLayout()
        normal_hbox.addWidget(normal_lbl)
        normal_hbox.addWidget(self.x2)
        normal_hbox.addWidget(self.y2)
        normal_hbox.addWidget(self.z2)

        pAND_grid = QGridLayout()
        pAND_grid.addLayout(point_hbox, 0, 0, alignment=QtCore.Qt.AlignCenter)
        pAND_grid.addLayout(normal_hbox, 1, 0, alignment=QtCore.Qt.AlignCenter)
        pAND_frame = QFrame()
        pAND_frame.setFixedSize(250, 100)
        pAND_frame.setStyleSheet(
            open("./styles/properties_form_style.qss", "r").read())
        pAND_frame.setFrameShape(QFrame.Panel)
        pAND_frame.setFrameShadow(QFrame.Sunken)
        pAND_frame.setLayout(pAND_grid)

        # planeTolerance
        planeTolerance_lbl = QLabel()
        self.planeTolerance_edit = QLineEdit()
        self.planeTolerance_edit.setFixedSize(150, 25)

        if flag == True:
            planeType_mas = self.planeType_edit.count()
            for i in range(planeType_mas):
                if self.planeType_edit.itemText(i) == value_list[0]:
                    self.planeType_edit.setCurrentIndex(i)

            self.x1.setText(value_list[1].split()[0])
            self.y1.setText(value_list[1].split()[1])
            self.z1.setText(value_list[1].split()[2])

            self.x2.setText(value_list[2].split()[0])
            self.y2.setText(value_list[2].split()[1])
            self.z2.setText(value_list[2].split()[2])

            self.planeTolerance_edit.setText(value_list[3])

        planeTolerance_grid = QGridLayout()
        planeTolerance_grid.addWidget(planeTolerance_lbl,
                                      0,
                                      0,
                                      alignment=QtCore.Qt.AlignCenter)
        planeTolerance_grid.addWidget(self.planeTolerance_edit,
                                      0,
                                      1,
                                      alignment=QtCore.Qt.AlignCenter)

        btnSave = QPushButton()
        btnSave.setFixedSize(80, 25)
        btnSave.clicked.connect(self.on_btnSave_clicked)
        buttons_hbox = QHBoxLayout()
        buttons_hbox.addWidget(btnSave)

        if self.interface_lng_val == 'Russian':
            btnSave.setText("Сохранить")
            main_lbl.setText("Укажите параметры плоскости")
            planeType_lbl.setText("planeType:")
            pAND_lbl.setText("pointAndNormalDict")
            point_lbl.setText("point:")
            normal_lbl.setText("normal:")
            planeTolerance_lbl.setText("planeTolerance:")

        elif self.interface_lng_val == 'English':
            btnSave.setText("Save")
            main_lbl.setText("Specify the parameters of the plane")
            planeType_lbl.setText("planeType:")
            pAND_lbl.setText("pointAndNormalDict")
            point_lbl.setText("point:")
            normal_lbl.setText("normal:")
            planeTolerance_lbl.setText("planeTolerance:")

        mMD_grid = QGridLayout()
        mMD_grid.addWidget(main_lbl, 0, 0, alignment=QtCore.Qt.AlignCenter)
        mMD_grid.addLayout(planeType_hbox,
                           1,
                           0,
                           alignment=QtCore.Qt.AlignCenter)
        mMD_grid.addWidget(pAND_lbl, 2, 0, alignment=QtCore.Qt.AlignCenter)
        mMD_grid.addWidget(pAND_frame, 3, 0, alignment=QtCore.Qt.AlignCenter)
        mMD_grid.addLayout(planeTolerance_grid,
                           4,
                           0,
                           alignment=QtCore.Qt.AlignCenter)
        mMD_grid.addLayout(buttons_hbox, 5, 0, alignment=QtCore.Qt.AlignCenter)
        mMD_grid.setRowStretch(6, 2)
        mMD_frame = QFrame()
        mMD_frame.setFixedSize(670, 510)
        mMD_frame.setStyleSheet(
            open("./styles/properties_form_style.qss", "r").read())
        mMD_frame.setFrameShape(QFrame.Panel)
        mMD_frame.setFrameShadow(QFrame.Sunken)
        mMD_frame.setLayout(mMD_grid)

        mMD_vbox = QVBoxLayout()
        mMD_vbox.addWidget(mMD_frame)

        # ---------------------Размещение на форме всех компонентов-------------------------#

        form = QFormLayout()
        form.addRow(mMD_vbox)
        self.setLayout(form)
Exemplo n.º 12
0
class MainWindow(QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.setFixedSize(800, 500)
        self.file = None
        but = QPushButton("Choose a directory with images", self)
        but.move(300, 20)
        but.setFixedSize(200, 25)
        but.clicked.connect(lambda x: self.get_data_path())
        but.setFocusPolicy(Qt.NoFocus)

        self.left = QFrame(self)
        self.left.setFixedSize(200, 200)
        self.left.move(50, 150)
        self.left.setAutoFillBackground(False)
        self.left.setStyleSheet(
            "QFrame { background-color: transparent; background: url('green_ar.png') no-repeat left; background-size: 50px 50px;}"
        )

        self.right = QFrame(self)
        self.right.setFixedSize(200, 200)
        self.right.move(550, 150)
        self.right.setAutoFillBackground(False)
        self.right.setStyleSheet(
            "QFrame { background-color: transparent; background: url('red_ar.png') no-repeat right; background-size: 50px 50px;}"
        )

        self.img = QFrame(self)
        self.img.setFixedSize(200, 400)
        self.img.setFrameShadow(QFrame.Sunken)
        self.img.setFrameShape(QFrame.Panel)
        self.img.move(300, 50)
        self.img.setAutoFillBackground(False)

        self.show()

    def get_data_path(self):
        local_path = str(
            QFileDialog.getExistingDirectory(self, "Select Directory"))
        if len(local_path) == 0: return
        self.local_path = local_path
        true_path = path.join(self.local_path, 'true')
        false_path = path.join(self.local_path, 'false')
        os.makedirs(true_path) if not os.path.exists(true_path) else None
        os.makedirs(false_path) if not os.path.exists(false_path) else None

        self.change_file()

    def change_file(self):
        self.first = os.listdir(self.local_path)[0]
        self.file = path.join(self.local_path, self.first).replace("\\", "/")
        self.img.setStyleSheet(
            "QFrame { background-color: transparent; background: url('" +
            self.file + "') no-repeat center; background-size: 100px 100px;}")

    def move_car(self, is_car):
        try:
            os.rename(
                self.file,
                path.join(self.local_path, "true" if is_car else "false",
                          self.first))
            self.change_file()
        except:
            pass

    def keyPressEvent(self, event):
        if event.key() == Qt.Key_Left:
            self.move_car(True)
        elif event.key() == Qt.Key_Right:
            self.move_car(False)
    def setupUi(self, Form, imglist):

        #self.setWindowTitle("Image Gallary")
        #self.setWindowFlags(Qt.MSWindowsFixedSizeDialogHint)
        #self.setFixedSize(682, 573)

        # ======================== WIDGETS ===========================

        framePrincipal = QFrame(Form)
        #framePrincipal.setFrameShape(QFrame.Box)
        #framePrincipal.setFrameShadow(QFrame.Sunken)
        #framePrincipal.setAutoFillBackground(True)
        #framePrincipal.setBackgroundRole(QPalette.Light)
        framePrincipal.setFixedSize(662, 503)
        framePrincipal.move(10, 10)

        frame = QFrame(framePrincipal)
        frame.setFixedSize(640, 480)
        frame.move(10, 10)

        self.labelImagen = QLabel(frame)
        self.labelImagen.setAlignment(Qt.AlignCenter)
        self.labelImagen.setGeometry(0, 0, 640, 480)
        # self.labelImagen.setScaledContents(True)

        self.labelImagenUno = QLabel(frame)
        self.labelImagenUno.setAlignment(Qt.AlignCenter)
        self.labelImagenUno.setGeometry(-650, 0, 640, 480)

        # =================== BOTONES (QPUSHBUTTON) ==================

        self.buttonCargar = QPushButton("Choose Image", Form)
        self.buttonCargar.setCursor(Qt.PointingHandCursor)
        self.buttonCargar.setFixedSize(325, 30)
        self.buttonCargar.move(10, 519)

        self.buttonEliminar = QPushButton("Delete Image", Form)
        self.buttonEliminar.setCursor(Qt.PointingHandCursor)
        self.buttonEliminar.setFixedSize(255, 30)
        self.buttonEliminar.move(345, 519)

        self.buttonAnterior = QPushButton("<", Form)
        self.buttonAnterior.setObjectName("Anterior")
        self.buttonAnterior.setToolTip("Imagen anterior")
        self.buttonAnterior.setCursor(Qt.PointingHandCursor)
        self.buttonAnterior.setFixedSize(30, 30)
        self.buttonAnterior.move(607, 519)

        self.buttonSiguiente = QPushButton(">", Form)
        self.buttonSiguiente.setObjectName("Siguiente")
        self.buttonSiguiente.setToolTip("Imagen siguiente")
        self.buttonSiguiente.setCursor(Qt.PointingHandCursor)
        self.buttonSiguiente.setFixedSize(30, 30)
        self.buttonSiguiente.move(642, 519)

        # ===================== CONECTAR SEÑALES =====================

        self.buttonCargar.clicked.connect(self.Cargar)
        self.buttonEliminar.clicked.connect(self.Eliminar)
        self.buttonAnterior.clicked.connect(self.anteriorSiguiente)
        self.buttonSiguiente.clicked.connect(self.anteriorSiguiente)

        # Establecer los valores predeterminados
        self.position = int
        self.estadoAnterior, self.estadoSiguiente = False, False
        self.carpetaActual = QDir()
        self.imagenesCarpeta = []
        self.imagenesCarpeta = imglist
Exemplo n.º 14
0
class ViewsController(QMainWindow):
    """This class will handle all the views of the application.

    Responsible for showing the differnet views in a specific order depending on the input of the user. If the
    application is launched with a profile (configuration file), the main view of the application will be shown;
    otherwise, the title and the configuration views will be shown prior to the main view.
    """

    home_singal = pyqtSignal()
    robot_select_signal = pyqtSignal()

    def __init__(self, parent, configuration, controller=None):
        """Constructor of the class.

        Arguments:
            parent {ui.gui.views_controller.ParentWindow} -- Parent of this.
            configuration {utils.configuration.Config} -- Configuration instance of the application

        Keyword Arguments:
            controller {utils.controller.Controller} -- Controller of the application (default: {None})
        """
        QMainWindow.__init__(self)
        self.parent = parent
        self.controller = controller
        self.configuration = configuration
        self.main_view = None
        self.thread_gui = ThreadGUI(self)
        self.thread_gui.daemon = True

        # self.home_singal.connect(self.show_title)
        # self.robot_select_signal.connect(self.show_robot_selection)

    def show_title(self):
        """Shows the title view"""
        title = TitleWindow(self.parent)
        title.switch_window.connect(self.show_robot_selection)
        self.parent.main_layout.addWidget(title)
        self.fadein_animation()

    def show_robot_selection(self):
        """Shows the robot selection view"""
        from views.robot_selection import RobotSelection

        delete_widgets_from(self.parent.main_layout)
        robot_selector = RobotSelection(self.parent)
        robot_selector.switch_window.connect(self.show_world_selection)
        self.parent.main_layout.addWidget(robot_selector, 0)
        self.fadein_animation()

    def show_world_selection(self):
        """Shows the world selection view"""
        from views.world_selection import WorldSelection

        delete_widgets_from(self.parent.main_layout)
        world_selector = WorldSelection(self.parent.robot_selection,
                                        self.configuration, self.parent)
        world_selector.switch_window.connect(self.show_layout_selection)
        self.parent.main_layout.addWidget(world_selector)
        self.fadein_animation()

    def show_layout_selection(self):
        """Show the layout configuration view"""
        delete_widgets_from(self.parent.main_layout)
        self.layout_selector = LayoutSelection(self.configuration, self.parent)
        self.layout_selector.switch_window.connect(self.show_main_view_proxy)
        self.parent.main_layout.addWidget(self.layout_selector)
        self.fadein_animation()

    def show_main_view_proxy(self):
        """Helper function to show the main view. Will close the parent window to create  a new one"""
        # self.show_main_view(False)
        self.parent.close()

    def show_main_view(self, from_main):
        """Shows the main window depending on where the application comes from.

        If the from_main flag is true, the configuration comes from the previous GUI views. Otherwise, the configuration
        comes from a configuration file. Eitherway, the main view will be shown with the proper configuration.

        Arguments:
            from_main {bool} -- tells if the configuration comes from either configuration file or GUI.
        """
        if not from_main:
            layout_configuration = self.layout_selector.get_config()
            delete_widgets_from(self.parent.main_layout)
        else:
            layout_configuration = None
        self.main_view = MainView(layout_configuration, self.configuration,
                                  self.controller, self.parent)
        self.parent.main_layout.addWidget(self.main_view)
        self.fadein_animation()
        self.start_thread()

    def start_thread(self):
        """Start the GUI refresing loop"""
        self.thread_gui.start()

    def fadein_animation(self):
        """Start a fadein animation for views transitions"""
        self.w = QFrame(self.parent)
        # self.parent.main_layout.addWidget(self.w, 0)
        self.w.setFixedSize(WIDTH, HEIGHT)
        self.w.setStyleSheet('background-color: rgba(51,51,51,1)')
        self.w.show()

        effect = QGraphicsOpacityEffect()
        self.w.setGraphicsEffect(effect)

        self.animation = QPropertyAnimation(effect, b"opacity")
        self.animation.setDuration(500)
        self.animation.setStartValue(1)
        self.animation.setEndValue(0)

        self.animation.start(QPropertyAnimation.DeleteWhenStopped)
        self.animation.finished.connect(self.fade_animation)

    def fade_animation(self):
        """Safe kill the animation"""
        self.w.close()
        del self.w
        del self.animation

    def update_gui(self):
        """Update the GUI. Called from the refresing loop thread"""
        while not self.parent.closing:
            if self.main_view:
                self.main_view.update_gui()
            time.sleep(0.1)
Exemplo n.º 15
0
    def __init__(self, parent, db_path, file_name):
        QWidget.__init__(self, parent)

        # Получаем рисунок и помещаем его в виджет
        con = sqlite3.connect(db_path)
        cur = con.cursor()

        sql_item_img_select = "SELECT item_img FROM nomenclature WHERE item_name = ?"
        cur.execute(sql_item_img_select, [file_name])
        item_img = cur.fetchone()

        pix = QPixmap(item_img[0])
        pix_mini = pix.scaled(350, 290, QtCore.Qt.KeepAspectRatio)
        img_lbl = QLabel()

        img_lbl.setPixmap(pix_mini)
        img_lbl_vbox = QVBoxLayout()
        img_lbl_vbox.addWidget(img_lbl)
        img_lbl_frame = QFrame()
        img_lbl_frame.setLayout(img_lbl_vbox)
        img_lbl_frame.setFixedSize(350, 290)

        # Получаем все данные для товара
        # -номер
        sql_item_numb_select = "SELECT item_numb FROM nomenclature WHERE item_name = ?"
        cur.execute(sql_item_numb_select, [file_name])
        item_numb = cur.fetchone()
        # -название
        sql_item_name_select = "SELECT item_name FROM nomenclature WHERE item_name = ?"
        cur.execute(sql_item_name_select, [file_name])
        item_name = cur.fetchone()
        # -ед.изм.
        sql_item_unit_select = "SELECT item_unit FROM nomenclature WHERE item_name = ?"
        cur.execute(sql_item_unit_select, [file_name])
        item_unit = cur.fetchone()
        # -категория
        sql_item_cat_select = "SELECT item_cat FROM nomenclature WHERE item_name = ?"
        cur.execute(sql_item_cat_select, [file_name])
        item_cat = cur.fetchone()
        # -количество
        sql_item_amount_select = "SELECT item_amount FROM items_positions WHERE item_name = ?"
        # -поставщики
        sql_item_sup_select = "SELECT DISTINCT supp FROM ro_orders WHERE name = ?"

        # Проверяем, есть ли товар в наличии и только тогда выводим количество
        # и поставщиков
        sql_item_cur_select = "SELECT DISTINCT name FROM ro_orders WHERE name = ?"
        cur.execute(sql_item_cur_select, [file_name])
        item_cur = cur.fetchone()
        if item_cur is not None:
            cur.execute(sql_item_amount_select, [file_name])
            item_amount = cur.fetchone()
            cur.execute(sql_item_sup_select, [file_name])
            item_supp = cur.fetchall()

            suppliers_str = ''
            k = 1
            for el in item_supp[0]:
                if k != len(item_supp):
                    suppliers_str = suppliers_str + el + ','
                else:
                    suppliers_str = suppliers_str + el
                k = k + 1
            item_amount_str = str(item_amount[0])
        else:
            item_amount_str = 'Товар не в наличии'
            suppliers_str = 'Товар не в наличии'

        # Формируем таблицу
        item_card_table = QTableWidget()
        item_card_table.setRowCount(6)
        item_card_table.setColumnCount(1)
        item_card_table.horizontalHeader().hide()
        item_card_table.setFixedSize(210, 185)
        item_card_table.horizontalHeader().resizeSection(0, 125)
        #horizontal
        # столбец - номер
        item_card_table.verticalHeader().resizeSection(0, 30)
        item_card_table.verticalHeader().setSectionResizeMode(
            0, QHeaderView.Fixed)
        item_card_table.verticalHeader().minimumSectionSize()
        column_1 = QTableWidgetItem()
        column_1.setText("№")
        item_card_table.setVerticalHeaderItem(0, column_1)
        item_card_table.verticalHeader().setStyleSheet("color: steelblue")

        item_numb_lbl = QLabel(str(item_numb[0]))
        item_card_table.setCellWidget(0, 0, item_numb_lbl)

        # столбец - название
        item_card_table.verticalHeader().resizeSection(1, 30)
        item_card_table.verticalHeader().setSectionResizeMode(
            1, QHeaderView.Fixed)
        column_2 = QTableWidgetItem()
        column_2.setText("Название")
        item_card_table.setVerticalHeaderItem(1, column_2)
        item_card_table.verticalHeader().setStyleSheet("color: steelblue")

        item_name_lbl = QLabel(item_name[0])
        item_card_table.setCellWidget(1, 0, item_name_lbl)

        # столбец - ед.изм
        item_card_table.verticalHeader().resizeSection(2, 30)
        item_card_table.verticalHeader().setSectionResizeMode(
            2, QHeaderView.Fixed)
        column_3 = QTableWidgetItem()
        column_3.setText("Ед.изм.")
        item_card_table.setVerticalHeaderItem(2, column_3)
        item_card_table.verticalHeader().setStyleSheet("color: steelblue")

        item_unit_lbl = QLabel(item_unit[0])
        item_card_table.setCellWidget(2, 0, item_unit_lbl)

        # столбец - категория
        item_card_table.verticalHeader().resizeSection(3, 30)
        item_card_table.verticalHeader().setSectionResizeMode(
            3, QHeaderView.Fixed)
        column_4 = QTableWidgetItem()
        column_4.setText("Категория")
        item_card_table.setVerticalHeaderItem(3, column_4)
        item_card_table.verticalHeader().setStyleSheet("color: steelblue")

        item_cat_lbl = QLabel(item_cat[0])
        item_card_table.setCellWidget(3, 0, item_cat_lbl)

        # столбец - количество
        item_card_table.verticalHeader().resizeSection(4, 30)
        item_card_table.verticalHeader().setSectionResizeMode(
            4, QHeaderView.Fixed)
        column_5 = QTableWidgetItem()
        column_5.setText("Количество")
        item_card_table.setVerticalHeaderItem(4, column_5)
        item_card_table.verticalHeader().setStyleSheet("color: steelblue")

        item_amount_lbl = QLabel(item_amount_str)
        item_card_table.setCellWidget(4, 0, item_amount_lbl)

        # столбец - поставщики
        item_card_table.verticalHeader().resizeSection(5, 30)
        item_card_table.verticalHeader().setSectionResizeMode(
            5, QHeaderView.Fixed)
        column_6 = QTableWidgetItem()
        column_6.setText("Поставщики")
        item_card_table.setVerticalHeaderItem(5, column_6)
        item_card_table.verticalHeader().setStyleSheet("color: steelblue")

        item_supp_lbl = QLabel(suppliers_str)
        item_card_table.setCellWidget(5, 0, item_supp_lbl)

        cur.close()
        con.close()

        item_prs_grid = QGridLayout()
        item_prs_grid.addWidget(img_lbl_frame,
                                0,
                                0,
                                alignment=QtCore.Qt.AlignCenter)
        item_prs_grid.addWidget(item_card_table,
                                1,
                                0,
                                alignment=QtCore.Qt.AlignCenter)

        scrollArea = QScrollArea()
        scrollArea.setWidgetResizable(True)
        scrollArea.setLayout(item_prs_grid)
        scrollArea.setFixedSize(600, 518)

        fQMD_grid = QGridLayout()
        fQMD_grid.addWidget(scrollArea, 0, 0, alignment=QtCore.Qt.AlignCenter)
        fQMD_frame = QFrame()
        fQMD_frame.setStyleSheet(
            open("./styles/properties_form_style.qss", "r").read())
        fQMD_frame.setFrameShape(QFrame.Panel)
        fQMD_frame.setFrameShadow(QFrame.Sunken)
        fQMD_frame.setLayout(fQMD_grid)

        fQMD_vbox = QVBoxLayout()
        fQMD_vbox.addWidget(fQMD_frame)

        # Размещение на форме всех компонентов

        form = QFormLayout()
        form.addRow(fQMD_vbox)
        self.setLayout(form)
Exemplo n.º 16
0
class Window(QMainWindow):
    def __init__(self):
        super(Window, self).__init__()
        # Set size and centre window
        self.setGeometry(50, 50, 500, 400)
        qtRectangle = self.frameGeometry()
        centerPoint = QDesktopWidget().availableGeometry().center()
        qtRectangle.moveCenter(centerPoint)

        self.move(qtRectangle.topLeft())

        self.setWindowTitle("Rthenticator")
        self.setWindowIcon(QIcon('icon.ico'))
        self.setStyleSheet("background-color: #2F3031")

        self.home()

    def home(self):
        # Init QSystemTrayIcon
        self.tray_icon = QSystemTrayIcon(self)
        self.tray_icon.setIcon(QIcon('icon.ico'))
        show_action = QAction("Show", self)
        quit_action = QAction("Exit", self)
        hide_action = QAction("Hide", self)
        show_action.triggered.connect(self.show)
        hide_action.triggered.connect(self.hide)
        quit_action.triggered.connect(qApp.quit)
        tray_menu = QMenu()
        tray_menu.addAction(show_action)
        tray_menu.addAction(hide_action)
        tray_menu.addAction(quit_action)
        self.tray_icon.setContextMenu(tray_menu)
        self.tray_icon.activated.connect(self.systemIcon)
        self.tray_icon.show()

        # Button Setup
        self.btnImport = QPushButton("Import", self)
        self.btnImport.move(50, 320)
        self.btnImport.setStyleSheet(
            "background-color: #737C7D; color: #E9E6E4")
        self.btnImport.clicked.connect(self.btnImportClicked)

        # Listbox Setup
        self.Listbox = QListWidget(self)
        self.Listbox.setAlternatingRowColors(True)
        self.Listbox.setFixedSize(220, 300)
        self.Listbox.move(10, 10)
        self.Listbox.setStyleSheet(
            "alternate-background-color: #3F4041; color: #E9E6E4;")
        self.Listbox.itemClicked.connect(self.listboxClicked)
        for key in sorted(secrets):
            self.Listbox.addItem(key)
        self.Listbox.setCurrentRow(0)
        self.Listbox.currentItem().setSelected(True)
        # Listview context menu
        self.Listbox.setContextMenuPolicy(Qt.CustomContextMenu)
        self.Listbox.customContextMenuRequested.connect(self.showMenu)
        self.Listbox.itemChanged.connect(self.listboxChanged)
        self.old_name = ""

        # Frame Setup
        self.Frame = QFrame(self)
        self.Frame.setFixedSize(220, 300)
        self.Frame.move(266, 10)
        self.Frame.setFrameShape(QFrame.Shape.Panel)
        self.Frame.setFrameShadow(QFrame.Shadow.Plain)
        self.Frame.setStyleSheet("color: #828790")

        # Progress Bar Setup
        self.progress = QProgressBar(self)
        self.progress.setGeometry(266, 325, 200, 20)
        self.progress.setTextVisible(False)
        self.progress.setStyleSheet(
            "QProgressBar::chunk { background: #6187CB; }")
        self.progress.setRange(1, 29)

        # Progress Bar Timer Setup
        self.timer = QTimer()
        self.timer.timeout.connect(self.progressTimer)
        self.timer.start(1000)

        # Label Setup
        self.label = QLabel(self)
        self.label.setGeometry(310, 220, 150, 40)
        self.label.setText("")
        self.label.setFont(QFont("Arial", 30, QFont.Bold))
        self.label.setStyleSheet("color: #E9E6E4")
        self.label.setTextInteractionFlags(Qt.TextSelectableByMouse)

        self.image = QLabel(self)
        self.image.setGeometry(300, 40, 150, 150)

        self.Listbox.setFocus(True)
        self.listboxClicked()
        self.show()

    # Restore view when tray icon doubleclicked
    def systemIcon(self, reason):
        if reason == QSystemTrayIcon.DoubleClick:
            self.show()
            self.copy_auth_code()

    # Override closeEvent, to intercept the window closing event
    def closeEvent(self, event):
        event.ignore()
        self.hide()
        self.tray_icon.showMessage("Tray Program",
                                   "Application was minimized to Tray",
                                   QSystemTrayIcon.Information, 2000)

    def copy_auth_code(self):
        """
        Copies Authentication code to the clipboard
        """
        answer = self.Listbox.currentItem().text()
        totp = pyotp.TOTP(secrets[answer][0])
        self.label.setText(str(totp.now()))
        pyperclip.copy(totp.now())

    def progressTimer(self):
        """
        Updates progress timer
        Copies authentication code to clipboard once timer has reached 0 and main window is not in system tray
        """
        current_time = int(time.time() % 30)
        self.progress.setValue(current_time)
        if current_time == 0:
            if self.isVisible():
                self.copy_auth_code()

    def setImage(self):
        """
        Reads from the images directory to see if there is a matching logo and must be the same name
        Splits the text on a `:`
        png files only
        """
        item = self.Listbox.currentItem().text().split(":")[0]
        fname = f"images/{item}.png"
        if os.path.isfile(fname):
            pixmap = QPixmap(fname).scaled(150, 150)
            self.image.setPixmap(pixmap)
        else:
            self.image.setPixmap(QPixmap())

    def listboxClicked(self):
        """
        Listbox has been clicked
        """
        self.setImage()
        self.copy_auth_code()

    def btnImportClicked(self):
        """
        Imports a QR-code png file and add its to secrets.json
        """
        fileName, _ = QFileDialog.getOpenFileName(
            self, "QFileDialog.getOpenFileName()", "", "All Files (*)")
        if fileName:
            test = unquote(
                decode(Image.open(fileName))[0].data.decode("utf-8"))
            query = urlsplit(test).query
            params = parse_qs(query)
            start = "/totp/"
            end = "\\?"
            test = re.search(f'{start}(.*){end}', test).group(1)
            secrets[test] = [params['secret'][0]]
            self.Listbox.addItem(test)
            with open('secrets.json', 'w') as fh:
                json.dump(secrets, fh, sort_keys=True, indent=4)

    def showMenu(self, pos):
        """
        Displays right click context menu, with 2 options
        - Rename - Allows us to rename an entry
        - Delete - Aloows us to remove and entry
        """
        menu = QMenu()
        renameAction = menu.addAction("Rename")
        deleteAction = menu.addAction("Delete")
        action = menu.exec_(self.Listbox.viewport().mapToGlobal(pos))
        if action == renameAction:
            this_item = self.Listbox.currentItem()
            self.Listbox.blockSignals(
                True
            )  # Block signals so we dont trigger the listboxChanged function
            this_item.setFlags(
                this_item.flags()
                | Qt.ItemIsEditable)  # Allows us to edit the item
            self.Listbox.blockSignals(False)  # Re-enables signals
            self.old_name = this_item.text()
            self.Listbox.edit(self.Listbox.currentIndex())
        if action == deleteAction:
            self.showMessageBox()

    def showMessageBox(self):
        """
        Creates and displays a message box for delete confirmation
        """
        box = QMessageBox()
        box.setIcon(QMessageBox.Question)
        box.setWindowTitle('Warning!')
        box.setStandardButtons(QMessageBox.Yes | QMessageBox.No)
        box.setStyleSheet("background-color: #2F3031;")
        box.setText(
            "<FONT COLOR='#E9E6E4'>Do you really wish to delete this?</FONT>")
        btnYes = box.button(QMessageBox.Yes)
        btnYes.setStyleSheet("background-color: #737C7D; color: #E9E6E4")
        btnYes.setText('Yes')
        btnNo = box.button(QMessageBox.No)
        btnNo.setStyleSheet("background-color: #737C7D; color: #E9E6E4")
        btnNo.setText('No')
        box.exec_()

        if box.clickedButton() == btnYes:
            items = self.Listbox.selectedItems()
            for item in items:
                new_name = item.text()
                self.Listbox.takeItem(self.Listbox.row(item))
                secrets.pop(new_name)
                with open('secrets.json', 'w') as fh:
                    json.dump(secrets, fh, sort_keys=True, indent=4)

    def listboxChanged(self):
        """
        Called when we have changed text of an item in the listbox
        """
        new_name = self.Listbox.currentItem().text()
        self.Listbox.blockSignals(
            True)  # Block signals so we dont trigger ourselves
        this_item = self.Listbox.currentItem()
        this_item.setFlags(this_item.flags()
                           & ~Qt.ItemIsEditable)  # Turn off the Editable flag
        self.Listbox.blockSignals(False)  # Re-enables signals to be processed
        secrets[new_name] = secrets.pop(self.old_name)
        with open('secrets.json', 'w') as fh:
            json.dump(secrets, fh, sort_keys=True, indent=4)
Exemplo n.º 17
0
    def __init__(self, resObject):
        super().__init__()
        self.setWindowTitle("mainwidget")
        self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self._magicList = []
        self.uploaded = False
        self.isConnected = False

        self.dim = (dim.height() - rPix(70), dim.width() - rPix(320)
                    )  ##1010,1600
        self.setFixedSize(self.dim[1], self.dim[0])

        self.stackIndex = 0
        ## Adopting global Resource Object
        self.res = resObject

        self.terminate = False
        ## Setting Attributes
        if winStat:
            self.setWindowFlags(
                Qt.FramelessWindowHint)  #|Qt.WindowStaysOnTopHint)
        else:
            self.setWindowFlags(Qt.FramelessWindowHint)
        self.installEventFilter(self)

        self.setAttribute(Qt.WA_TranslucentBackground, True)
        self.setFocusPolicy(Qt.StrongFocus)
        self.setFocus()

        ## Ctrl + W Exit Shortcut
        self.shortcut = QShortcut(QKeySequence("Ctrl+W"), self)
        self.shortcut.activated.connect(self.closeApp)
        self.shortcut2 = QShortcut(QKeySequence("Ctrl+R"), self)
        self.shortcut2.activated.connect(self.resetStackColor)

        self.stack = QStackedWidget()

        ##Creating multiple instances of cStack
        self.stackList = [
            cStack(i, self.res, self.res.bg[(i - 1) % 4])
            for i in range(1, tconNum + 1)
        ]

        ##Initializing Main Stack
        self.mainStack = QWidget()
        self.mainStackUI()

        ## Adding cStack instances to StackedWidget
        self.stack.addWidget(self.mainStack)
        for i in self.stackList:
            self.stack.addWidget(i)

        ## Stack Frame Placeholder

        stackFrameLayout = QHBoxLayout()
        stackFrameLayout.addWidget(self.stack)
        stackFrameLayout.setSpacing(0)
        stackFrameLayout.setContentsMargins(0, 0, 0, 0)

        stackFrame = QFrame()
        stackFrame.setLayout(stackFrameLayout)

        ## Stack Buttons MAIN (prev and next stack)

        self.nextStack = ImageButton("resources/img/buttons/nextC",
                                     rPix(50),
                                     rPix(50),
                                     toggle=True,
                                     tooltip="<b>Next Contestant</b>")
        self.nextStack.clicked.connect(self.nextEvt)

        self.prevStack = ImageButton("resources/img/buttons/prevC",
                                     rPix(50),
                                     rPix(50),
                                     toggle=True,
                                     tooltip="<b>Previous Contestant</b>")
        self.prevStack.clicked.connect(self.prevEvt)

        ## Stack Buttons (MAIN - 14)
        self.stackSelector = [QPushButton() for i in range(0, tconNum + 1)]

        selectorHLayout = QHBoxLayout()
        selectorHLayout.setSpacing(rPix((14 / tconNum) * 20))
        selectorHLayout.setContentsMargins(0, rPix(5), 0, rPix(5))

        ##STYLING STACK SELECTORS
        for i in range(0, len(self.stackSelector)):
            self.stackSelector[i].setFixedSize(rPix((14 / tconNum) * 50),
                                               rPix(20))
            stackSelectorState(self.stackSelector[i], 0)
            self.stackSelector[i].setFont(QFont(fonts[2]))
            self.stackSelector[i].setText(str(i))
            _temp = partial(self.stackSelectorEvt, i)
            self.stackSelector[i].clicked.connect(_temp)
            selectorHLayout.addWidget(self.stackSelector[i])

        ## Setting first stack selector as Main Widget
        self.stackSelector[0].setText("MAIN")
        self.stackSelector[0].setFont(QFont(fonts[0], rPix(10)))
        self.stackSelector[0].clicked.connect(lambda: self.stackSelectorEvt(0))

        ## Stack Selector Frame
        self.selectorFrame = QFrame()
        self.selectorFrame.setObjectName("selector")
        self.selectorFrame.setStyleSheet(
            adaptiveStyle("selector", palette=self.res.buttonPanelPalette[0]))
        self.selectorFrame.setFixedSize(
            rPix(((14 / tconNum)) * (50 + 40)) * tconNum + 1, rPix(35))
        self.selectorFrame.setLayout(selectorHLayout)

        ## Center Y Axis of selectorFrame
        selectorVLayout = QVBoxLayout()
        selectorVLayout.addStretch(1)
        selectorVLayout.addWidget(self.selectorFrame)
        selectorVLayout.addStretch(1)

        ## Selector Frame (MAIN-14)

        topLayout = QHBoxLayout()
        topLayout.addWidget(self.prevStack)
        topLayout.addStretch(1)
        topLayout.addLayout(selectorVLayout)
        topLayout.addStretch(1)
        topLayout.addWidget(self.nextStack)
        topLayout.setContentsMargins(rPix(20), 0, rPix(20), 0)
        topLayout.setSpacing(rPix(20))

        ##Selector Frame + Prev and Next Button
        topFrame = QFrame()
        topFrame.setObjectName("noframe")
        topFrame.setStyleSheet(styles["noframe"])
        topFrame.setFixedSize(self.dim[1], rPix(80))
        topFrame.setLayout(topLayout)

        ##Bottom Panel OBJECTS
        reqAssistance = ImageButton("resources/img/buttons/assist",
                                    rPix(30),
                                    rPix(30),
                                    toggle=False,
                                    tooltip="<b>Request Assistance</b>")
        reqAssistance.setFixedSize(rPix(30), rPix(30))

        manual = ImageButton("resources/img/buttons/manual",
                             rPix(30),
                             rPix(30),
                             toggle=False,
                             tooltip="<b>Open User Manual</b>")
        manual.clicked.connect(self.manualEvt)

        self.upload = ImageButton("resources/img/buttons/upload",
                                  rPix(30),
                                  rPix(30),
                                  toggle=True,
                                  tooltip="<b>Upload Scores</b>")
        self.upload.clicked.connect(self.uploadScores)

        ##Semi Rounded Rectangle LAYOUT
        buttonLayout = QHBoxLayout()
        buttonLayout.addWidget(self.upload)
        buttonLayout.addWidget(reqAssistance)
        buttonLayout.addWidget(manual)
        buttonLayout.setContentsMargins(rPix(10), 0, rPix(10), 0)
        buttonLayout.setSpacing(rPix(20))

        self.buttonFrame = QFrame()
        self.buttonFrame.setObjectName("buttonFrame")
        self.buttonFrame.setStyleSheet(
            adaptiveStyle("buttonFrame",
                          palette=self.res.buttonPanelPalette[0]))
        self.buttonFrame.setFixedSize(rPix(140), rPix(45))
        self.buttonFrame.setLayout(buttonLayout)

        ##Semi Rounded Rectangle Handler

        botLayout = QHBoxLayout()
        botLayout.addStretch(1)
        botLayout.addWidget(self.buttonFrame)
        botLayout.setContentsMargins(rPix(20), 0, 0, 0)
        botLayout.setSpacing(rPix(20))

        ##Filler Frame for Button Panel
        botFrame = QFrame()
        botFrame.setObjectName("noframe")
        botFrame.setStyleSheet(styles["noframe"])
        botFrame.setFixedSize(self.dim[1], rPix(45))
        botFrame.setLayout(botLayout)

        ##Top Frame + Stack
        stackLayout = QVBoxLayout(self)
        stackLayout.setContentsMargins(0, 0, 0, 0)
        stackLayout.setSpacing(0)
        stackLayout.addStretch(1)
        stackLayout.addWidget(topFrame)
        stackLayout.addWidget(stackFrame)
        stackLayout.addWidget(botFrame)
        stackLayout.addStretch(1)

        ##StackFrame
        stackLayoutFrame = QFrame()
        stackLayoutFrame.setObjectName("noframe")
        stackLayoutFrame.setStyleSheet(styles["noframe"])
        stackLayoutFrame.setLayout(stackLayout)

        ##Mask Layout
        maskHLayout = QHBoxLayout()
        maskHLayout.setContentsMargins(0, 0, 0, 0)
        maskHLayout.setSpacing(0)
        maskHLayout.addStretch(1)
        maskHLayout.addWidget(stackLayoutFrame)
        maskHLayout.addStretch(1)

        maskVLayout = QHBoxLayout()
        maskVLayout.setContentsMargins(0, 0, 0, 0)
        maskVLayout.setSpacing(0)
        maskVLayout.addStretch(1)
        maskVLayout.addLayout(maskHLayout)
        maskVLayout.addStretch(1)

        ##Mask Frame
        mask = QFrame()
        mask.setObjectName("mask")
        mask.setStyleSheet(styles["mask"])
        mask.setLayout(maskVLayout)

        ## Placeholder Layout
        MainPlaceholderLayout = QHBoxLayout()
        MainPlaceholderLayout.setContentsMargins(0, 0, 0, 0)
        MainPlaceholderLayout.setSpacing(0)
        MainPlaceholderLayout.addWidget(mask)

        self.setLayout(MainPlaceholderLayout)
        self.prevStack.setEnabled_(False)
        self.stackSelector[0].setEnabled(False)
        self.showFullScreen()
Exemplo n.º 18
0
class Interface(QWidget):
    '''
    Main widget
    '''
    def __init__(self):
        super(Interface, self).__init__()

        # Initialize window details and geometry
        self.title = 'Options Viewer'
        self.setWindowTitle(self.title)
        self.width = 654
        self.height = 342
        self.setFixedSize(self.width, self.height)
        self.setGeometry(0, 0, self.width - 4, self.height - 4)
        self.centerWindow()

        # Initialize the ErrorPopup
        self.ePop = ErrorPopup(self)

        # Initialize layouts (class, size, margins, spacing)
        self.layout = QVBoxLayout(self)
        self.layout.setContentsMargins(0, 0, 0, 0)
        self.layout.setSpacing(0)
        self.top = QFrame()
        self.top.setFixedSize(self.width, 302)
        self.topLayout = QHBoxLayout(self.top)
        self.topLayout.setContentsMargins(0, 0, 0, 0)
        self.topLayout.setSpacing(0)
        self.topRight = QFrame(self)
        self.topRight.setObjectName('topRight')
        self.topRight.setFixedSize(200, 302)
        self.topRightLayout = QVBoxLayout(self.topRight)
        self.topRightLayout.setContentsMargins(0, 0, 0, 0)
        self.topRightLayout.setSpacing(0)
        self.bottom = QFrame(self)
        self.bottom.setObjectName('bottom')
        self.bottom.setFixedSize(self.width, 40)
        self.bottomLayout = QHBoxLayout(self.bottom)
        self.bottomLayout.setContentsMargins(0, 0, 0, 0)
        self.bottomLayout.setSpacing(0)

        # Create top-right widgets and add to layout
        self.add1x2 = Add1x2Container(self)
        self.buttonContainer = ButtonContainer(self)
        self.topRightLayout.addWidget(self.add1x2)
        self.topRightLayout.addWidget(QHLine())
        self.topRightLayout.addWidget(self.buttonContainer)

        # Create table and add to layout
        self.model = EntryModel(self)
        self.table = Table1x2()
        self.table.setModel(self.model)
        self.table.resize()
        self.topLayout.addWidget(self.table)
        self.topLayout.addWidget(self.topRight)

        # Create bottom widgets and add to layout
        self.bottomContainer = BottomContainer(self)
        self.helpquitContainer = HelpQuitContainer(self)
        self.bottomLayout.addWidget(self.bottomContainer)
        self.bottomLayout.addWidget(self.helpquitContainer)

        # Create chart and add (along with other layouts/containers) to main layout
        self.chartContainer = ChartContainer(self)
        self.layout.addWidget(self.top)
        self.layout.addWidget(self.chartContainer)
        self.layout.addWidget(self.bottom)

        # Initialize with chart hidden
        self.chartContainer.hide()
        self.setStyleSheet(open("styles/main.qss", "r").read())

        # Uncomment to debug frame locations


#        self.setStyleSheet("QFrame {background-color: rgb(255,0,0); border:1px solid rgb(0, 0, 0)}")

    def enableChart(self):
        '''
        Enables chart button and calls plot()
        '''
        self.buttonContainer.chartButton.setEnabled(True)
        self.chartContainer.plot()

    def disableChart(self):
        '''
        Clears & hides chart, disables button, resizes window 
        '''
        self.chartContainer.figure.clear()
        self.chartContainer.hide()
        self.buttonContainer.chartButton.setEnabled(False)
        try:
            self.setFixedSize(self.width, 342)
            self.buttonContainer.chartButton.setText('VVV   Show chart   VVV')
            self.buttonContainer.chartButton.disconnect()
            self.buttonContainer.chartButton.clicked.connect(
                lambda: self.buttonContainer.showChart())
        except:
            pass

    def centerWindow(self):
        '''
        Centers window based on screen geometry
        '''
        qr = self.frameGeometry()
        cp = QDesktopWidget().availableGeometry().center()
        cp.setY(cp.y() - 250)
        qr.moveCenter(cp)
        self.move(qr.topLeft())
        return
Exemplo n.º 19
0
    def window(self):

        Register_Values = Components.Register_Values.Register_Values(
        )  # Object of Class Register Values
        List_of_Registers = Components.List_of_Registers.List_of_Registers(
        )  # Object of Class List of Registers

        self.tableWidget = Register_Values.getTable()
        self.listWidget = List_of_Registers.getListOfRegisters()
        self.listWidget.itemClicked.connect(self.Clicked)

        splitter = QSplitter(Qt.Vertical)

        splitter.addWidget(self.listWidget)
        splitter.addWidget(self.tableWidget)
        splitter.setSizes([300, 150])

        horizontalLayout = QHBoxLayout()

        simulatorFont = QtGui.QFont("Arial", 15, QtGui.QFont.Bold)
        simulatorTitle = QtWidgets.QLabel(self)
        simulatorTitle.setText("ATMega328p")
        simulatorTitle.setAlignment(Qt.AlignCenter)
        simulatorTitle.setFont(simulatorFont)
        simulatorTitle.setAlignment(Qt.AlignCenter)

        simulatorFrame = QFrame()
        simulatorFrame.setStyleSheet("QWidget { background-color: silver }")
        simulatorFrame.setLineWidth(3)
        simulatorFrame.setMidLineWidth(3)
        simulatorFrame.setFrameShape(QFrame.Panel)
        simulatorFrame.setFixedSize(250, 450)
        simulatorFrame.layout = QHBoxLayout()
        simulatorFrame.layout.addWidget(simulatorTitle)

        simulatorFrame.setFrameShadow(simulatorFrame.Raised)
        simulatorFrame.setLayout(simulatorFrame.layout)

        pinFont = QtGui.QFont("Arial", 9, QtGui.QFont.Bold)

        pinsl = [
            'PD0', 'PD1', 'PD2', 'PD3', 'PD4', 'PD5', 'PD6', 'PB3', 'PB4',
            'PB5', 'PB6'
        ]

        leftPinFrame = QFrame()
        leftPinFrame.layout = QVBoxLayout()
        leftPinFrame.layout.setAlignment(Qt.AlignRight)
        leftPinFrame.layout.addStretch()

        pinl_dict = {}

        for i in pinsl:
            pinl_dict[i] = QtWidgets.QPushButton(self)

            pinl_dict[i].setText(i)
            pinl_dict[i].setStyleSheet('color : dark grey')
            #pinl_dict[i].setAlignment(Qt.AlignRight)
            pinl_dict[i].setFixedSize(30, 30)
            pinl_dict[i].setFont(pinFont)
            leftPinFrame.layout.setSpacing(10)
            leftPinFrame.layout.addWidget(pinl_dict[i])

        leftPinFrame.setLayout(leftPinFrame.layout)
        leftPinFrame.layout.addStretch()

        rightPinFrame = QFrame()
        rightPinFrame.layout = QVBoxLayout()
        rightPinFrame.layout.setAlignment(Qt.AlignLeft)
        rightPinFrame.layout.addStretch()

        pinsr = [
            'PC6', 'PC5', 'PC4', 'PC3', 'PC2', 'PC1', 'PC0', 'PB1', 'PB2',
            'VCC', 'GND'
        ]
        pinr_dict = {}

        for i in pinsr:
            pinr_dict[i] = QtWidgets.QPushButton(self)

            pinr_dict[i].setText(i)
            pinr_dict[i].setStyleSheet('color : dark grey')
            pinr_dict[i].setFixedSize(30, 30)
            pinr_dict[i].setFont(pinFont)
            rightPinFrame.layout.setSpacing(10)
            rightPinFrame.layout.addWidget(pinr_dict[i])

        rightPinFrame.layout.addStretch()
        rightPinFrame.setLayout(rightPinFrame.layout)

        pinl_dict['PD0'].setStyleSheet('color : red')
        pinl_dict['PD1'].setStyleSheet('color : red')
        pinl_dict['PD2'].setStyleSheet('color : red')

        pinr_dict['PC6'].setStyleSheet('color : green')
        pinr_dict['PC5'].setStyleSheet('color : green')
        pinr_dict['PC4'].setStyleSheet('color : green')

        rightFrame = QFrame()
        rightFrame.setFrameShape(QFrame.StyledPanel)
        rightFrame.layout = QHBoxLayout()
        rightFrame.layout.addWidget(leftPinFrame)
        rightFrame.layout.addWidget(simulatorFrame)
        rightFrame.layout.addWidget(rightPinFrame)
        rightFrame.setLayout(rightFrame.layout)

        horizontalSplitter = QSplitter(Qt.Horizontal)
        horizontalLayout.addWidget(splitter)
        horizontalSplitter.addWidget(rightFrame)
        horizontalSplitter.setSizes([80, 320])
        horizontalSplitter.adjustSize()

        titleFont = QtGui.QFont("Arial", 15, QtGui.QFont.Bold)
        Title = QtWidgets.QLabel(self)
        Title.setText("ATMega328p Simulator")
        Title.setFont(titleFont)
        Title.setAlignment(Qt.AlignCenter)
        horizontalLayout.addWidget(horizontalSplitter)

        StatusFont = QtGui.QFont("Helvetica", 10, QtGui.QFont.Bold)
        Status = QtWidgets.QLabel(self)
        Status.setText(self.getConnectionStatus())
        Status.setFont(StatusFont)
        Status.setStyleSheet('color : green')
        Status.setAlignment(Qt.AlignCenter)

        verticalLayout = QVBoxLayout()
        verticalLayout.addWidget(Title)
        verticalLayout.addWidget(Status)
        verticalLayout.addLayout(horizontalLayout)

        self.setLayout(verticalLayout)
Exemplo n.º 20
0
class MainWindowClass(QMainWindow):
    def __init__(self, parent=None):
        QMainWindow.__init__(self, parent)
        self.interface_lng_val = 'Russian'
        if self.interface_lng_val == 'Russian':
            self.setWindowTitle("Графический интерфейс программы OpenFOAM")
        elif self.interface_lng_val == 'English':
            self.setWindowTitle("OpenFOAM_decompose_GUI")

        # Базовые переменные
        self.full_dir = ''
        self.prj_name = ''
        self.con = ''
        self.lock_bool = False
        self.application = ''
        self.object_edit_txt = ''

        # ---------------------------Панель управления подготовкой задачи МСС----------------------------- #

        self.proj_open = QAction(self)
        self.proj_open.setEnabled(True)
        proj_ico = self.style().standardIcon(QStyle.SP_ArrowUp)
        self.proj_open.setIcon(proj_ico)
        if self.interface_lng_val == 'Russian':
            self.proj_open.setToolTip('Открыть проект')
        elif self.interface_lng_val == 'English':
            self.proj_open.setToolTip('Open the project')

        self.lng_chs = QAction(self)
        self.lng_chs.setEnabled(True)
        lng_chs_ico = self.style().standardIcon(
            QStyle.SP_FileDialogDetailedView)
        self.lng_chs.setIcon(lng_chs_ico)
        if self.interface_lng_val == 'Russian':
            self.lng_chs.setToolTip('Выбрать язык интерфейса программы')
        elif self.interface_lng_val == 'English':
            self.lng_chs.setToolTip('Select the interface language')

        self.file_open = QAction(self)
        self.file_open.setEnabled(False)
        file_open_ico = self.style().standardIcon(QStyle.SP_FileIcon)
        self.file_open.setIcon(file_open_ico)
        if self.interface_lng_val == 'Russian':
            self.file_open.setToolTip(
                'Открыть форму создания служебного файла для директории 0')
        elif self.interface_lng_val == 'English':
            self.file_open.setToolTip(
                'Open the form for creating the service file for the directory 0'
            )

        self.toolBar_1 = QToolBar("MyToolBar")
        self.toolBar_1.addAction(self.proj_open)
        self.toolBar_1.addAction(self.lng_chs)
        self.toolBar_1.addAction(self.file_open)

        self.proj_open.triggered.connect(
            lambda: first_toolbar_functions_class.on_proj_open(self))
        self.lng_chs.triggered.connect(
            lambda: first_toolbar_functions_class.on_lng_chs(self))
        self.file_open.triggered.connect(
            lambda: first_toolbar_functions_class.on_0_files_window_chs(self))

        self.addToolBar(self.toolBar_1)

        ###----------------------Панель управления подготовкой РС--------------------------###

        self.msh_open = QAction(self)
        self.msh_open.setEnabled(False)
        msh_ico = self.style().standardIcon(QStyle.SP_FileDialogNewFolder)
        self.msh_open.setIcon(msh_ico)
        if self.interface_lng_val == 'Russian':
            self.msh_open.setToolTip('Открыть форму выбора расчетной сетки')
        elif self.interface_lng_val == 'English':
            self.msh_open.setToolTip('Open the mesh selection form')

        self.msh_run = QAction(self)
        self.msh_run.setEnabled(False)
        msh_ico = self.style().standardIcon(QStyle.SP_ArrowRight)
        self.msh_run.setIcon(msh_ico)
        if self.interface_lng_val == 'Russian':
            self.msh_run.setToolTip('Выполнить генерацию расчетной сетки')
        elif self.interface_lng_val == 'English':
            self.msh_run.setToolTip('Make the mesh generation')

        self.msh_visual = QAction(self)
        self.msh_visual.setEnabled(False)
        msh_visual_ico = self.style().standardIcon(QStyle.SP_MediaSeekForward)
        self.msh_visual.setIcon(msh_visual_ico)
        if self.interface_lng_val == 'Russian':
            self.msh_visual.setToolTip(
                'Выполнить визуализацию расчетной сетки')
        elif self.interface_lng_val == 'English':
            self.msh_visual.setToolTip('Make the mesh visualization')

        self.toolBar_2 = QToolBar()
        self.toolBar_2.addAction(self.msh_open)
        self.toolBar_2.addAction(self.msh_run)
        self.toolBar_2.addAction(self.msh_visual)

        self.msh_open.triggered.connect(
            lambda: second_toolbar_functions_class.on_msh_open(self))
        self.msh_run.triggered.connect(
            lambda: second_toolbar_functions_class.on_msh_run(
                prj_path_val, mesh_name_txt_val, pp_dir, self, self.
                interface_lng_val, msh_type))

        self.msh_visual.triggered.connect(
            lambda: second_toolbar_functions_class.on_visual_msh_run(
                prj_path_val, mesh_name_txt_val, pp_dir, self, self.
                interface_lng_val, msh_type))

        self.addToolBar(self.toolBar_2)
        self.insertToolBarBreak(self.toolBar_2)

        ###----------------------Панель управления решением задачи МСС--------------------------###

        self.solv_run = QAction(self)
        self.solv_run.setEnabled(False)
        solv_run_ico = self.style().standardIcon(QStyle.SP_DialogNoButton)
        self.solv_run.setIcon(solv_run_ico)
        if self.interface_lng_val == 'Russian':
            self.solv_run.setToolTip('Выполнить решение')
        elif self.interface_lng_val == 'English':
            self.solv_run.setToolTip('Run solution')

        self.solv_stop = QAction(self)
        self.solv_stop.setEnabled(False)
        close_ico = self.style().standardIcon(QStyle.SP_DockWidgetCloseButton)
        self.solv_stop.setIcon(close_ico)
        if self.interface_lng_val == 'Russian':
            self.solv_stop.setToolTip('Остановить процесс решения')
        elif self.interface_lng_val == 'English':
            self.solv_stop.setToolTip('Stop the solution process')

        self.solv_run_vis = QAction(self)
        self.solv_run_vis.setEnabled(False)
        solv_run_vis_ico = self.style().standardIcon(QStyle.SP_CommandLink)
        self.solv_run_vis.setIcon(solv_run_vis_ico)
        if self.interface_lng_val == 'Russian':
            self.solv_run_vis.setToolTip(
                'Выполнить визуализацию результатов решения')
        elif self.interface_lng_val == 'English':
            self.solv_run_vis.setToolTip('Visualize the solution results')

        self.toolBar_3 = QToolBar()
        self.toolBar_3.addAction(self.solv_run)
        self.toolBar_3.addAction(self.solv_stop)
        self.toolBar_3.addAction(self.solv_run_vis)

        self.solv_run.triggered.connect(
            lambda: second_toolbar_functions_class.on_solv_run(
                prj_path_val, mesh_name_txt_val, pp_dir, self, self.
                interface_lng_val, msh_type))

        self.solv_stop.triggered.connect(
            lambda: second_toolbar_functions_class.on_solv_stop(
                prj_path_val, mesh_name_txt_val, pp_dir, self, self.
                interface_lng_val, msh_type))

        self.solv_run_vis.triggered.connect(
            lambda: second_toolbar_functions_class.on_solv_vis(
                prj_path_val, mesh_name_txt_val, pp_dir, self, self.
                interface_lng_val, msh_type))

        self.addToolBar(self.toolBar_3)
        self.insertToolBarBreak(self.toolBar_3)

        ###----------------Верхний виджет с полным путем до файла сетки----------------###

        self.tdw = QDockWidget()
        self.tdw.setFixedSize(1400, 65)
        self.tdw.setFeatures(self.tdw.NoDockWidgetFeatures)
        self.tdw_grid = QGridLayout()
        self.tdw_grid.setColumnStretch(2, 1)
        self.tdw_frame = QFrame()
        self.tdw_frame.setStyleSheet("background-color: ghostwhite;"
                                     "border-width: 0.5px;"
                                     "border-style: solid;"
                                     "border-color: silver;")
        self.tdw_frame.setLayout(self.tdw_grid)
        self.tdw.setWidget(self.tdw_frame)
        self.addDockWidget(QtCore.Qt.TopDockWidgetArea, self.tdw)

        ###-----------------Левый виджет с файловой системой проекта---------------------###

        self.fsw = QDockWidget()
        self.fsw.setFeatures(self.fsw.NoDockWidgetFeatures)
        self.fsw_label = QLabel()
        self.fsw_label.setAlignment(QtCore.Qt.AlignCenter)
        self.fsw_grid = QGridLayout()
        self.fsw_grid.addWidget(self.fsw_label, 0, 0)
        self.fsw_frame = QFrame()
        self.fsw_frame.setFixedSize(200, 35)
        self.fsw_frame.setStyleSheet("background-color: honeydew;"
                                     "border-width: 1px;"
                                     "border-style: solid;"
                                     "border-color: dimgray;"
                                     "border-radius: 4px;")
        self.fsw_frame.setLayout(self.fsw_grid)

        if self.interface_lng_val == 'Russian':
            fs_lbl = "Файловая Cтруктура Проекта"
        elif self.interface_lng_val == 'English':
            fs_lbl = "File Structure of the Project"

        self.fsw_label.setText("<font color='SeaGreen'>" + fs_lbl + "</font>")
        self.fsw_label.setStyleSheet("border-style: none;" "font-size: 10pt;")
        self.fsw.setTitleBarWidget(self.fsw_frame)
        self.treeview = QTreeView()
        self.treeview.setFixedSize(200, 520)
        self.treeview.model = QtGui.QStandardItemModel()
        self.treeview.setModel(self.treeview.model)
        self.treeview.setColumnWidth(0, 100)
        self.treeview.setColumnHidden(1, True)
        self.treeview.setColumnHidden(2, True)
        self.treeview.setColumnHidden(3, True)
        self.treeview.header().hide()
        self.treeview.setItemsExpandable(False)
        self.treeview.clicked.connect(self.on_treeview_clicked)
        self.fsw.setWidget(self.treeview)

        ###-----------Правый виджет с формой вывода результатов генерации файлов-----------###

        self.cdw = QDockWidget()
        self.cdw.setFeatures(self.cdw.NoDockWidgetFeatures)
        self.addDockWidget(QtCore.Qt.RightDockWidgetArea, self.cdw)

        self.cdw_grid = QGridLayout()
        self.cdw_frame = QFrame()
        self.cdw_frame.setFixedSize(495, 35)
        self.cdw_frame.setStyleSheet("border-width: 1px;"
                                     "border-style: solid;"
                                     "border-color: dimgray;"
                                     "border-radius: 4px;"
                                     "background-color: honeydew;")
        self.cdw_frame.setLayout(self.cdw_grid)

        self.outf_lbl = QLabel()
        self.outf_lbl.setAlignment(QtCore.Qt.AlignCenter)
        self.outf_lbl.setStyleSheet("border-style: none;" "font-size: 9pt;")

        self.cdw_grid.addWidget(self.outf_lbl, 0, 0)

        self.outf_edit = QTextEdit()
        self.outf_scroll = QScrollArea()
        self.outf_scroll.setWidgetResizable(True)
        self.outf_scroll.setWidget(self.outf_edit)
        self.outf_scroll.setFixedSize(495, 520)

        ###-----------------Центральный виджет с формой параметров---------------------###

        self.ffw = QDockWidget()
        self.ffw.setFeatures(self.ffw.NoDockWidgetFeatures)
        self.ffw_label = QLabel()
        self.ffw_label.setAlignment(QtCore.Qt.AlignCenter)
        self.ffw_grid = QGridLayout()
        self.ffw_grid.addWidget(self.ffw_label, 0, 0)
        self.ffw_frame = QFrame()
        self.ffw_frame.setFixedSize(693, 44)
        self.ffw_frame.setStyleSheet("border-width: 1px;"
                                     "border-style: solid;"
                                     "border-color: dimgray;"
                                     "border-radius: 4px;"
                                     "background-color: honeydew;")
        self.ffw_frame.setLayout(self.ffw_grid)

        ###------------------Нижний виджет со служебными сообщениями------------------###

        if self.interface_lng_val == 'Russian':
            self.serv_mes = QDockWidget("Служебные сообщения")
        elif self.interface_lng_val == 'English':
            self.serv_mes = QDockWidget("Service messages")

        self.serv_mes.setFixedSize(1400, 160)
        self.serv_mes.setFeatures(self.serv_mes.NoDockWidgetFeatures)
        self.listWidget = QListWidget()
        self.serv_mes.setWidget(self.listWidget)

    ###---------------------Функции, связанные с работой главного окна------------------------###

    # ...........................Функция клика по файлу из дерева.........................

    ###........................Функция открытия окна выбора интерфейса программы...................###

    # ...........................Функция клика по файлу из дерева.........................

    def on_treeview_clicked(self, index):
        global fileName
        indexItem = self.treeview.model.index(index.row(), 0, index.parent())
        self.lock_bool = True
        self.file_name = self.treeview.model.itemFromIndex(indexItem).text()
        file_form_class.inp_file_form_func(self, self.file_name, self.con)
        file_name_title = file_form_class.out_file_name_func()
        self.clear_label = QLabel()
        if file_name_title != None:
            if file_name_title != 'md':
                #self.cdw.setWidget(self.clear_label)
                #self.cdw.setTitleBarWidget

                if os.path.exists(self.full_dir + '/system/' +
                                  file_name_title):
                    outf = open(self.full_dir + '/system/' + file_name_title)
                    data = outf.read()
                    self.outf_edit.setText(data)
                    outf.close()
                elif os.path.exists(self.full_dir + '/constant/' +
                                    file_name_title):
                    outf = open(self.full_dir + '/constant/' + file_name_title)
                    data = outf.read()
                    self.outf_edit.setText(data)
                    outf.close()
                elif os.path.exists(self.full_dir + '/0/' + file_name_title):
                    outf = open(self.full_dir + '/0/' + file_name_title)
                    data = outf.read()
                    self.outf_edit.setText(data)
                    outf.close()

                self.addDockWidget(QtCore.Qt.RightDockWidgetArea, self.cdw)

                self.cdw.setWidget(self.outf_scroll)

                #data = outf.read()

                if self.interface_lng_val == 'Russian':
                    self.outf_lbl.setText("Файл " + "<font color='peru'>" +
                                          file_name_title + "</font>")
                elif self.interface_lng_val == 'English':
                    self.outf_lbl.setText("<font color='peru'>" +
                                          file_name_title + "</font>" +
                                          " file")
                #self.outf_edit.setText(data)

                self.cdw.setTitleBarWidget(self.cdw_frame)
                #outf.close()

                self.setCentralWidget(self.ffw)
                file_form = file_form_class.out_file_form_func()
                self.ffw.setWidget(file_form)
                self.ffw.setTitleBarWidget(self.ffw_frame)

                if self.interface_lng_val == 'Russian':
                    self.ffw_label.setText("Форма параметров файла: " +
                                           "<font color='peru'>" +
                                           file_name_title + "</font>")
                elif self.interface_lng_val == 'English':
                    self.ffw_label.setText("<font color='peru'>" +
                                           file_name_title + "</font>" +
                                           " file parameters form")
                self.ffw_label.setStyleSheet("border-style: none;"
                                             "font-size: 9pt;")

            elif file_name_title == 'md':
                if self.interface_lng_val == 'Russian':
                    msg_lbl = QLabel(
                        '<span style="color:blue">Для создания расчетной сетки воспользуйтесь панелью инструментов</span>'
                    )
                elif self.interface_lng_val == 'English':
                    msg_lbl = QLabel(
                        '<span style="color:blue">To create a mesh use the toolbar.</span>'
                    )

                self.listWidget.clear()
                self.item = QListWidgetItem()
                self.listWidget.addItem(self.item)
                self.listWidget.setItemWidget(self.item, msg_lbl)

        else:

            self.ffw.setTitleBarWidget(self.clear_label)
            self.ffw.setWidget(self.clear_label)
            self.cdw.setWidget(self.clear_label)
            self.cdw.setTitleBarWidget(self.clear_label)

    # .........................Функция получения языка интерфейса..........................

    def on_lng_get(self, interface_lng):
        global interface_lng_val

        self.interface_lng_val = interface_lng

        if self.interface_lng_val == 'Russian':
            self.setWindowTitle("Графический интерфейс программы OpenFOAM")
            self.proj_open.setToolTip('Открыть проект')
            self.msh_run.setToolTip('Выполнить генерацию расчетной сетки')
            self.msh_visual.setToolTip(
                'Выполнить визуализацию расчетной сетки')
            self.lng_chs.setToolTip('Выбрать язык интерфейса программы')
            self.file_open.setToolTip(
                'Открыть форму создания служебного файла для директории 0')
            self.msh_open.setToolTip('Открыть форму выбора расчетной сетки')
            self.solv_run.setToolTip('Выполнить решение')
            self.solv_stop.setToolTip('Остановить процесс решения')
            self.solv_run_vis.setToolTip(
                'Выполнить визуализацию результатов решения')

        elif self.interface_lng_val == 'English':
            self.setWindowTitle("OpenFOAM_decompose_GUI")
            self.proj_open.setToolTip('Open the project')
            self.msh_run.setToolTip('Run mesh generation')
            self.msh_visual.setToolTip('Run mesh visualization')
            self.lng_chs.setToolTip(
                'Select the interface language for the program')
            self.file_open.setToolTip(
                'Open the form for creating the service file for the directory 0'
            )
            self.msh_open.setToolTip('Open the mesh selection form')
            self.solv_run.setToolTip('Run solution')
            self.solv_stop.setToolTip('Stop the solution process')
            self.solv_run_vis.setToolTip('Visualize the solution results')

    # .........................Функция получения пути до директории..........................

    def on_prj_path_get(self, prj_path, mesh_name_txt):
        global prj_path_val
        global mesh_name_txt_val
        global pp_dir

        prj_path_val = prj_path
        mesh_name_txt_val = mesh_name_txt

        pp_dir, pp_sys = os.path.split(prj_path_val)

    # .............................Функция получения типа сетки..............................

    def on_mesh_type_get(self, pd_2):
        global msh_type
        msh_type = pd_2
Exemplo n.º 21
0
    def initGUI(self):
        layout = QHBoxLayout()

        v = QVBoxLayout()

        line = QFrame()
        line.setFixedSize(300, 1)
        line.setStyleSheet('background-color: rgb(149,149,149)')

        widget = QWidget()
        grid = QGridLayout()

        addTrace = QPushButton('add trace')
        addTrace.setFixedSize(100, 30)
        addTrace.clicked[bool].connect(self.addTrace)
        grid.addWidget(addTrace, 9, 0)

        self.color = pg.ColorButton()
        self.color.setFixedSize(60, 30)
        self.color.setColor(color=(225, 200, 50))
        grid.addWidget(self.color, 8, 0)

        names = [
            'Num:',
            '',
            '',
            '',
            'Show',
            '',
            '',
            '',
            'z_em:',
            '',
            '...',
            '',
            'z_abs',
            '',
            '...',
            '',
            'HI',
            '',
            '...',
            '',
            'H2',
            '',
            '...',
            '',
            'Av',
            '',
            '...',
            '',
            'Av_bump',
            '',
            '...',
            '',
        ]

        positions = [(i, j) for i in range(8) for j in range(4)]

        for position, name in zip(positions, names):
            if name == '' or (position[1] == 0 and position[0] not in [0, 2]):
                continue
            label = QLabel(name)
            width = 30 if name == '...' else 45
            label.setFixedSize(width, 30)
            grid.addWidget(label, *position)

        self.opt_but = OrderedDict([
            ('traceNum', [0, 1]),
            ('z_em_min', [2, 1]),
            ('z_em_max', [2, 3]),
            ('z_abs_min', [3, 1]),
            ('z_abs_max', [3, 3]),
            ('HI_min', [4, 1]),
            ('HI_max', [4, 3]),
            ('H2_min', [5, 1]),
            ('H2_max', [5, 3]),
            ('Av_min', [6, 1]),
            ('Av_max', [6, 3]),
            ('Av_bump_min', [7, 1]),
            ('Av_bump_max', [7, 3]),
        ])
        validator = QDoubleValidator()
        validator.setLocale(QLocale('C'))

        for opt, pos in self.opt_but.items():
            b = QLineEdit(str(getattr(self, opt)))
            b.setFixedSize(40, 30)
            b.setValidator(validator)
            b.textChanged[str].connect(partial(self.onChanged, attr=opt))
            grid.addWidget(b, pos[0], pos[1])

        for position, name in zip(positions, names):
            if position[1] == 0 and position[0] not in [0, 2]:
                s = '' if position[0] == 1 else ':'
                setattr(self, name, QCheckBox(name + s))
                getattr(self, name).setFixedSize(80, 30)
                grid.addWidget(getattr(self, name), *position)

        self.Show.setChecked(False)
        self.z_abs.setChecked(True)
        self.z_abs.stateChanged.connect(self.checkEvent)
        self.HI.setChecked(True)
        self.H2.setChecked(True)
        self.Av.setChecked(False)
        self.Av_bump.setChecked(False)

        widget.setFixedSize(250, 400)
        widget.setLayout(grid)
        v.addWidget(widget)

        v.addWidget(line)

        self.addSDSSStars = QCheckBox('add SDSS stars')
        self.addSDSSStars.setFixedSize(200, 30)
        self.addSDSSStars.stateChanged.connect(self.addStellarLocus)
        self.addSDSSStars.setChecked(False)
        v.addWidget(self.addSDSSStars)

        self.addSDSSQSO = QCheckBox('add SDSS QSO:')
        self.addSDSSQSO.setFixedSize(160, 30)
        self.addSDSSQSO.stateChanged.connect(self.addQSOSDSS)
        self.addSDSSQSO.setChecked(False)
        v.addWidget(self.addSDSSQSO)
        h = QHBoxLayout()
        self.z_SDSS_min = QLineEdit('2.6')
        self.z_SDSS_min.setFixedSize(50, 30)
        h.addWidget(self.z_SDSS_min)
        label = QLabel('...')
        label.setFixedSize(15, 30)
        h.addWidget(label)
        self.z_SDSS_max = QLineEdit('2.8')
        self.z_SDSS_max.setFixedSize(50, 30)
        h.addWidget(self.z_SDSS_max)
        h.addStretch(1)
        v.addLayout(h)

        v.addWidget(line)

        v.addWidget(QLabel('Select by criterion:'))
        self.criteria = QTextEdit('')
        self.criteria.setFixedSize(300, 200)
        self.criteria.setText('r-i 0.6 0.8 \ni-g -2.0 -0.8\ng-r 0.2 0.6')
        v.addWidget(self.criteria)
        self.select = QPushButton('Apply')
        self.select.setFixedSize(80, 30)
        self.select.clicked[bool].connect(self.applyCriteria)
        v.addWidget(self.select)

        v.addWidget(line)

        v.addWidget(QLabel('Select by name:'))
        self.names = QTextEdit('')
        self.names.setFixedSize(300, 200)
        self.names.setText('7093-0632 \n6439-0160')
        v.addWidget(self.names)
        self.shownames = QPushButton('Show')
        self.shownames.setFixedSize(80, 30)
        self.shownames.clicked[bool].connect(self.applyNames)
        v.addWidget(self.shownames)
        v.addStretch(1)
        layout.addLayout(v)

        self.plot = pg.GraphicsWindow(size=(1900, 1800))

        self.p = []
        for comb in self.combs:
            p = colorColorPlot(self, comb)
            setattr(self, p.name, p)
            self.p.append(getattr(self, p.name))
            self.plot.addItem(self.p[-1],
                              row=(len(self.p) - 1) // 4,
                              col=(len(self.p) - 1) % 4)

        self.setLinks()
        layout.addWidget(self.plot)
        self.setLayout(layout)
Exemplo n.º 22
0
class BRFViewer(QWidget):
    """
    Window that is used to show all the results produced with for the
    currently selected water level dataset.
    """
    def __init__(self, wldset=None, parent=None):
        super(BRFViewer, self).__init__(parent)
        self.__save_ddir = osp.dirname(__rootdir__)

        self.setWindowTitle('BRF Results Viewer')
        self.setWindowIcon(icons.get_icon('master'))
        self.setWindowFlags(Qt.Window | Qt.CustomizeWindowHint
                            | Qt.WindowMinimizeButtonHint
                            | Qt.WindowCloseButtonHint)

        self.__initGUI__()
        self.set_wldset(wldset)

    def __initGUI__(self):

        # ---- Navigator

        self.btn_prev = QToolButtonNormal(icons.get_icon('go_previous'))
        self.btn_prev.clicked.connect(self.navigate_brf)

        self.btn_next = QToolButtonNormal(icons.get_icon('go_next'))
        self.btn_next.clicked.connect(self.navigate_brf)

        self.current_brf = QSpinBox()
        self.current_brf.setRange(0, 99)
        self.current_brf.setAlignment(Qt.AlignCenter)
        self.current_brf.setButtonSymbols(QAbstractSpinBox.NoButtons)
        self.current_brf.setCorrectionMode(
            QAbstractSpinBox.CorrectToNearestValue)
        self.current_brf.valueChanged.connect(self.navigate_brf)
        self.current_brf.setValue(0)

        self.total_brf = QLabel('/ 0')

        # ---- Language button

        self.btn_language = LangToolButton()
        self.btn_language.setToolTip(
            "Set the language of the text shown in the graph.")
        self.btn_language.sig_lang_changed.connect(self.plot_brf)
        self.btn_language.setIconSize(icons.get_iconsize('normal'))

        # ---- Toolbar

        # Generate the buttons :

        self.btn_del = QToolButtonNormal(icons.get_icon('clear_search'))
        self.btn_del.setToolTip('Delete current BRF results')
        self.btn_del.clicked.connect(self.del_brf)

        self.btn_save = btn_save = QToolButtonNormal(icons.get_icon('save'))
        btn_save.setToolTip('Save current BRF graph...')
        btn_save.clicked.connect(self.select_savefig_path)

        self.btn_setp = QToolButtonNormal(icons.get_icon('page_setup'))
        self.btn_setp.setToolTip('Show graph layout parameters...')
        self.btn_setp.clicked.connect(self.toggle_graphpannel)

        # Generate the layout :

        self.tbar = myqt.QFrameLayout()

        buttons = [
            btn_save, self.btn_del,
            VSep(), self.btn_prev, self.current_brf, self.total_brf,
            self.btn_next,
            VSep(), self.btn_setp, self.btn_language
        ]

        for btn in buttons:
            if isinstance(btn, QLayout):
                self.tbar.addLayout(btn, 1, self.tbar.columnCount())
            else:
                self.tbar.addWidget(btn, 1, self.tbar.columnCount())

        row = self.tbar.columnCount()
        self.tbar.addWidget(HSep(), 0, 0, 1, row + 1)
        self.tbar.setColumnStretch(row, 100)
        self.tbar.setContentsMargins(10, 0, 10, 10)  # (l, t, r, b)

        # ---- Graph Canvas

        self.fig_frame = QFrame()
        self.fig_frame.setFrameStyle(StyleDB().frame)
        self.fig_frame.setObjectName("figframe")
        self.fig_frame.setStyleSheet("#figframe {background-color:white;}")

        self.brf_canvas = FigureCanvasQTAgg(BRFFigure())

        fflay = QGridLayout(self.fig_frame)
        fflay.setContentsMargins(0, 0, 0, 0)  # (left, top, right, bottom)
        fflay.addWidget(self.tbar, 1, 0)
        fflay.addWidget(self.brf_canvas, 0, 0)

        # ---- Graph Options Panel

        self.graph_opt_panel = BRFOptionsPanel()
        self.graph_opt_panel.sig_graphconf_changed.connect(self.plot_brf)

        # ---- Main Layout

        ml = QGridLayout(self)

        ml.addWidget(self.fig_frame, 0, 2)
        ml.addWidget(self.graph_opt_panel, 0, 3)

        ml.setColumnStretch(1, 100)

    # ---- Toolbar Handlers

    def toggle_graphpannel(self):
        if self.graph_opt_panel.isVisible() is True:
            # Hide the panel.
            self.graph_opt_panel.setVisible(False)
            self.btn_setp.setAutoRaise(True)
            self.btn_setp.setToolTip('Show graph layout parameters...')

            w = self.size().width() - self.graph_opt_panel.size().width()
            self.setFixedWidth(w)
        else:
            # Show the panel.
            self.graph_opt_panel.setVisible(True)
            self.btn_setp.setAutoRaise(False)
            self.btn_setp.setToolTip('Hide graph layout parameters...')

            w = self.size().width() + self.graph_opt_panel.size().width()
            self.setFixedWidth(w)

    def navigate_brf(self):
        if self.sender() == self.btn_prev:
            cur_num = self.current_brf.value() - 1
        elif self.sender() == self.btn_next:
            cur_num = self.current_brf.value() + 1
        elif self.sender() == self.current_brf:
            cur_num = self.current_brf.value()
        self.current_brf.setValue(cur_num)

        self.update_brfnavigate_state()

    def del_brf(self):
        """Delete the graph and data of the currently selected result."""
        index = self.current_brf.value() - 1
        name = self.wldset.get_brfAt(index)
        self.wldset.del_brf(name)
        self.update_brfnavigate_state()

    def new_brf_added(self):
        self.current_brf.setMaximum(self.wldset.brf_count())
        self.current_brf.setValue(self.wldset.brf_count())
        self.update_brfnavigate_state()

    def update_brfnavigate_state(self):
        count = self.wldset.brf_count()
        self.total_brf.setText('/ %d' % count)

        self.current_brf.setMinimum(min(count, 1))
        self.current_brf.setMaximum(count)
        curnt = self.current_brf.value()

        self.tbar.setEnabled(count > 0)
        self.btn_prev.setEnabled(curnt > 1)
        self.btn_next.setEnabled(curnt < count)
        self.btn_del.setEnabled(count > 0)

        self.plot_brf()

    def select_savefig_path(self):
        """
        Opens a dialog to select a file path where to save the brf figure.
        """
        ddir = osp.join(self.__save_ddir, 'brf_%s' % self.wldset['Well'])

        dialog = QFileDialog()
        fname, ftype = dialog.getSaveFileName(self, "Save Figure", ddir,
                                              '*.pdf;;*.svg')
        ftype = ftype.replace('*', '')
        if fname:
            self.__save_ddir = osp.dirname(fname)
            if not fname.endswith(ftype):
                fname = fname + ftype
            self.save_brf_fig(fname)

    def save_brf_fig(self, fname):
        """Saves the current BRF figure to fname."""
        self.brf_canvas.figure.savefig(fname)

    # ---- Others

    def set_wldset(self, wldset):
        self.wldset = wldset
        if wldset is None:
            self.setEnabled(False)
        else:
            self.setEnabled(True)
            self.update_brfnavigate_state()

    def plot_brf(self):
        self.brf_canvas.figure.set_language(self.btn_language.language)
        if self.wldset.brf_count() == 0:
            self.brf_canvas.figure.empty_BRF()
        else:
            name = self.wldset.get_brfAt(self.current_brf.value() - 1)
            lag, A, err, date_start, date_end = self.wldset.get_brf(name)
            well = self.wldset['Well']

            if self.graph_opt_panel.show_ebar is False:
                err = []
            msize = self.graph_opt_panel.markersize
            draw_line = self.graph_opt_panel.draw_line

            ymin = self.graph_opt_panel.ymin
            ymax = self.graph_opt_panel.ymax
            yscale = self.graph_opt_panel.yscale

            xmin = self.graph_opt_panel.xmin
            xmax = self.graph_opt_panel.xmax
            xscale = self.graph_opt_panel.xscale

            time_units = self.graph_opt_panel.time_units

            date0 = '%02d/%02d/%04d' % (date_start[2], date_start[1],
                                        date_start[0])

            date1 = '%02d/%02d/%04d' % (date_end[2], date_end[1], date_end[0])

            self.brf_canvas.figure.plot_BRF(lag, A, err, date0, date1, well,
                                            msize, draw_line, [ymin, ymax],
                                            [xmin, xmax], time_units, xscale,
                                            yscale)
        self.brf_canvas.draw()

    def show(self):
        super(BRFViewer, self).show()
        qr = self.frameGeometry()
        if self.parentWidget():
            parent = self.parentWidget()

            wp = parent.frameGeometry().width()
            hp = parent.frameGeometry().height()
            cp = parent.mapToGlobal(QPoint(wp / 2, hp / 2))
        else:
            cp = QDesktopWidget().availableGeometry().center()

        qr.moveCenter(cp)
        self.move(qr.topLeft())
        self.fig_frame.setFixedSize(self.fig_frame.size())
        self.setFixedSize(self.size())

        self.raise_()
        if self.windowState() == Qt.WindowMinimized:
            # Window is minimised. Restore it.
            self.setWindowState(Qt.WindowNoState)
Exemplo n.º 23
0
class Main(UI_Main):

    resized = QtCore.pyqtSignal()
    total_price: int = 0

    def __init__(self):
        super().__init__()

        self.v = QVBoxLayout()
        self.h = QHBoxLayout()
        self.v.addStretch(1)
        self.h.addStretch(1)

        self.v.addLayout(self.h)

        self.v.addStretch(1)
        self.h.addStretch(1)

        self.modal_container = QFrame(self)
        self.modal_container.setObjectName('modal_container')
        self.modal_container.setLayout(self.v)
        self.resized.connect(self.on_mainWindow_resized)
        self.open_modal(self.login_form)

    def resizeEvent(self, event):
        self.resized.emit()

    def sync_cart(self):
        self.clear_cart()
        layout = self.table.products_layout
        for i in database.get_cart():
            self.update_total_price(i._selling_price * i._count)
            layout.insertWidget(layout.count() - 1, ProductTableItemWidget(i))

    def clear_cart(self):
        self.clear_layout(self.table.products_layout, 1)
        self.total_price = 0
        self.update_payment()

    def add2cart(self):
        product = self.sender().product
        database.add2cart(product.id)
        layout = self.table.products_layout
        product._count = 1
        self.update_total_price(product._selling_price * product._count)
        layout.insertWidget(0, ProductTableItemWidget(product))

    def update_total_price(self, add: int):
        self.total_price += add
        self.update_payment()

    def on_mainWindow_resized(self):
        if self.modal_container:
            self.modal_container.setFixedSize(self.size())

    @QtCore.pyqtSlot()
    def on_plus_clicked(self):
        self.open_modal(self.add_product_form)
        # self.open_add_product()

    @QtCore.pyqtSlot(str)
    def on_search_textEdited(self, filter_str: str = ''):
        self.update_list(filter_str)

    @QtCore.pyqtSlot(int)
    def on_to_pay_value_valueChanged(self, value: int = 0):
        self.update_payment()

    @QtCore.pyqtSlot()
    def on_pay_btn_clicked(self):
        database.sell()
        self.payment.to_pay_value.setValue(0)
        self.clear_cart()

    def update_payment(self):
        self.payment.surrender_value.setText(
            f'{self.payment.to_pay_value.value() - self.total_price}')
        self.payment.total_value.setText(f'{self.total_price}')

    def open_add_product(self):
        self.add_product_form.show()

    def update_list(self, filter_str: str = ''):
        self.clear_list()
        for p in database.get_products(filter_str):
            product = ProductWidget(p)
            product.clicked.connect(self.add2cart)
            self.sidebar.products_layout.insertWidget(
                self.sidebar.products_layout.count() - 1, product)

    def clear_list(self):
        self.clear_layout(self.sidebar.products_layout, 1)

    @staticmethod
    def clear_layout(layout, offset=0):
        for i in range(layout.count() - offset):
            layout.itemAt(i).widget().close()

    def open_modal(self, modal: QWidget):
        self.modal_container.setFixedSize(self.size())
        self.modal_container.show()

        self.h.insertWidget(1, modal, 1)
        self.h.itemAt(1).widget().show()

        shadow = QGraphicsDropShadowEffect()
        shadow.setColor(QColor(0, 0, 0, 100))
        shadow.setBlurRadius(50)
        shadow.setOffset(0, 10)

        modal.setGraphicsEffect(shadow)
        modal.setObjectName("modal")

    def close_modal(self):
        self.modal_container.hide()

    def close_add_product_form(self):
        self.close_modal()
        self.update_list()

    def close_login_form(self):
        self.close_modal()
        self.navbar.shop.setText(database.dbname)
        self.update_data()

    def update_data(self):
        self.update_list()
        self.sync_cart()
Exemplo n.º 24
0
    def initUI(self):

        fuenteSiacle = self.font()
        fuenteSiacle.setBold(True)
        fuenteSiacle.setPointSize(12)

        paletaBotones = self.palette()
        paletaBotones.setColor(QPalette.Background, QColor("#2EFEC8"))

        frameBotones = QFrame()
        frameBotones.setFrameStyle(QFrame.NoFrame)
        frameBotones.setAutoFillBackground(True)
        frameBotones.setPalette(paletaBotones)
        frameBotones.setFixedWidth(220)

        paletaPanel = self.palette()
        paletaPanel.setBrush(QPalette.Background, QBrush(QColor(255, 90, 0), Qt.SolidPattern))
        paletaPanel.setColor(QPalette.Foreground, Qt.white)

        labelSiacle = QLabel("ПАНЕЛЬ УПРАВЛЕНИЯ", frameBotones)
        labelSiacle.setAlignment(Qt.AlignCenter | Qt.AlignVCenter)
        labelSiacle.setFont(fuenteSiacle)
        labelSiacle.setAutoFillBackground(True)
        labelSiacle.setPalette(paletaPanel)
        labelSiacle.setFixedSize(220, 46)
        labelSiacle.move(0, 0)

        # ============================================================

        tamanioIcono = QSize(30, 30)

        botonNuevo = Boton(frameBotones)
        botonNuevo.setText(" Новый")
        botonNuevo.setToolTip("Новый клиент")
        botonNuevo.setCursor(Qt.PointingHandCursor)
        botonNuevo.move(-2, 45)

        botonActualizar = Boton(frameBotones)
        botonActualizar.setText(" Обновление")
        botonActualizar.setToolTip("Обновление клиента ")
        botonActualizar.setCursor(Qt.PointingHandCursor)
        botonActualizar.move(-2, 82)

        botonEliminar = Boton(frameBotones)
        botonEliminar.setText(" Удалить")
        botonEliminar.setToolTip("Удалить клиента")
        botonEliminar.setCursor(Qt.PointingHandCursor)
        botonEliminar.move(-2, 119)

        botonLimpiar = Boton(frameBotones)
        botonLimpiar.setText(" Закрыть")
        botonLimpiar.setToolTip("Закрыть бд")
        botonLimpiar.setCursor(Qt.PointingHandCursor)
        botonLimpiar.move(-2, 156)

        # ============================================================

        paletaSuscribete = self.palette()
        paletaSuscribete.setBrush(QPalette.Background, QBrush(QColor(135, 206, 250),
                                                              Qt.SolidPattern))

        fuenteSuscribete = self.font()
        fuenteSuscribete.setBold(True)
        fuenteSuscribete.setFamily("Arial")
        fuenteSuscribete.setPointSize(11)

        labelSuscribete = QLabel("<a href='https://t.me/yarosla_0v'>АВТОР</a>", frameBotones)

        labelSuscribete.setAlignment(Qt.AlignCenter | Qt.AlignVCenter)
        labelSuscribete.setOpenExternalLinks(True)
        labelSuscribete.setFont(fuenteSuscribete)
        labelSuscribete.setAutoFillBackground(True)
        labelSuscribete.setPalette(paletaSuscribete)
        labelSuscribete.setFixedSize(220, 46)
        labelSuscribete.move(0, 210)

        paletaFrame = self.palette()
        paletaFrame.setColor(QPalette.Background, QColor("blue"))

        frameBienvenido = QFrame()
        frameBienvenido.setFrameStyle(QFrame.NoFrame)
        frameBienvenido.setAutoFillBackground(True)
        frameBienvenido.setPalette(paletaFrame)
        frameBienvenido.setFixedHeight(46)

        # ============================================================

        paletaTitulo = self.palette()
        paletaTitulo.setColor(QPalette.Foreground, Qt.yellow)

        labelBienvenido = QLabel("Клиенты")
        labelBienvenido.setAlignment(Qt.AlignCenter)
        labelBienvenido.setFont(fuenteSiacle)
        labelBienvenido.setPalette(paletaTitulo)

        botonConfiguracion = QPushButton()
        botonConfiguracion.setIcon(QIcon("Imagenes/configuracion.png"))
        botonConfiguracion.setIconSize(QSize(24, 24))
        botonConfiguracion.setToolTip("Конфигурация")
        botonConfiguracion.setCursor(Qt.PointingHandCursor)
        botonConfiguracion.setFixedWidth(36)

        disenioFrame = QHBoxLayout()
        disenioFrame.addWidget(labelBienvenido, Qt.AlignCenter)
        disenioFrame.addStretch()
        disenioFrame.addWidget(botonConfiguracion)
        disenioFrame.setContentsMargins(0, 0, 5, 0)
        frameBienvenido.setLayout(disenioFrame)

        # ============================================================

        self.buscarLineEdit = QLineEdit()
        self.buscarLineEdit.setObjectName("Enter")
        self.buscarLineEdit.setPlaceholderText("Имя клента")
        self.buscarLineEdit.setMinimumSize(200, 26)

        botonBuscar = QPushButton("Поиск")
        botonBuscar.setObjectName("Поиск")
        botonBuscar.setCursor(Qt.PointingHandCursor)
        botonBuscar.setMinimumSize(60, 26)

        separadorTodos = QFrame()
        separadorTodos.setFrameShape(QFrame.VLine)
        separadorTodos.setFrameShadow(QFrame.Raised)
        separadorTodos.setFixedSize(1, 26)

        botonTodos = QPushButton("Все записи")
        botonTodos.setObjectName("Все записи")
        botonTodos.setCursor(Qt.PointingHandCursor)
        botonTodos.setMinimumSize(60, 26)

        nombreColumnas = ("Id", "Имя", "Фамилия", "Пол", "Дата рождения", "Страна",
                          "Телефон")

        menuMostrarOcultar = QMenu()
        for indice, columna in enumerate(nombreColumnas, start=0):
            accion = QAction(columna, menuMostrarOcultar)
            accion.setCheckable(True)
            accion.setChecked(True)
            accion.setData(indice)

            menuMostrarOcultar.addAction(accion)

        botonMostrarOcultar = QPushButton("Скрыть столбцы")
        botonMostrarOcultar.setCursor(Qt.PointingHandCursor)
        botonMostrarOcultar.setMenu(menuMostrarOcultar)
        botonMostrarOcultar.setMinimumSize(180, 26)

        disenioBuscar = QHBoxLayout()
        disenioBuscar.setSpacing(10)
        disenioBuscar.addWidget(self.buscarLineEdit)
        disenioBuscar.addWidget(botonBuscar)
        disenioBuscar.addWidget(separadorTodos)
        disenioBuscar.addWidget(botonTodos)
        disenioBuscar.addWidget(botonMostrarOcultar)

        self.tabla = QTableWidget()

        self.tabla.setEditTriggers(QAbstractItemView.NoEditTriggers)

        self.tabla.setDragDropOverwriteMode(False)

        self.tabla.setSelectionBehavior(QAbstractItemView.SelectRows)

        self.tabla.setSelectionMode(QAbstractItemView.SingleSelection)

        self.tabla.setTextElideMode(Qt.ElideRight)  # Qt.ElideNone

        self.tabla.setWordWrap(False)

        self.tabla.setSortingEnabled(False)

        self.tabla.setColumnCount(7)

        self.tabla.setRowCount(0)

        self.tabla.horizontalHeader().setDefaultAlignment(Qt.AlignHCenter | Qt.AlignVCenter |
                                                          Qt.AlignCenter)

        self.tabla.horizontalHeader().setHighlightSections(False)

        self.tabla.horizontalHeader().setStretchLastSection(True)

        self.tabla.verticalHeader().setVisible(False)

        self.tabla.setAlternatingRowColors(True)

        self.tabla.verticalHeader().setDefaultSectionSize(20)

        # self.tabla.verticalHeader().setHighlightSections(True)

        self.tabla.setHorizontalHeaderLabels(nombreColumnas)

        self.tabla.setContextMenuPolicy(Qt.CustomContextMenu)
        self.tabla.customContextMenuRequested.connect(self.menuContextual)

        for indice, ancho in enumerate((80, 240, 240, 140, 150, 130), start=0):
            self.tabla.setColumnWidth(indice, ancho)

        # ============================================================

        disenioBuscarTabla = QVBoxLayout()
        disenioBuscarTabla.addLayout(disenioBuscar)
        disenioBuscarTabla.addWidget(self.tabla)
        disenioBuscarTabla.setSpacing(8)
        disenioBuscarTabla.setContentsMargins(10, 10, 10, 0)

        disenioDerecho = QVBoxLayout()
        disenioDerecho.addWidget(frameBienvenido)
        disenioDerecho.addLayout(disenioBuscarTabla)
        disenioDerecho.setContentsMargins(0, 0, 0, 0)

        disenioFinal = QGridLayout()
        disenioFinal.addWidget(frameBotones, 0, 0)
        disenioFinal.addLayout(disenioDerecho, 0, 1)
        disenioFinal.setSpacing(0)
        disenioFinal.setContentsMargins(0, 0, 0, 0)

        self.setLayout(disenioFinal)

        self.copiarInformacion = QApplication.clipboard()

        botonNuevo.clicked.connect(self.Nuevo)
        botonActualizar.clicked.connect(self.Actualizar)
        botonEliminar.clicked.connect(self.Eliminar)
        botonLimpiar.clicked.connect(self.limpiarTabla)

        self.buscarLineEdit.returnPressed.connect(self.Buscar)
        botonBuscar.clicked.connect(self.Buscar)
        botonTodos.clicked.connect(self.Buscar)

        botonConfiguracion.clicked.connect(lambda: Configuracion(self).exec_())

        self.tabla.itemDoubleClicked.connect(self.Suscribete)

        menuMostrarOcultar.triggered.connect(self.mostrarOcultar)
Exemplo n.º 25
0
    def prepare_layout(self):
        main_view = QFrame()
        main_view.setObjectName("CPreparingWindowView")
        main_view.setStyleSheet(
            """QFrame#CPreparingWindowView {background-image: url(Resources/images/backgrounds/prepare-background.png);
                                                                border-width: 2px;}"""
        )
        vbox_main_layout = QVBoxLayout()
        vbox_main_layout.setAlignment(QtCore.Qt.AlignTop)
        vbox_main_layout.setContentsMargins(2, 2, 2, 2)
        vbox_main_layout.setSpacing(0)
        main_view.setLayout(vbox_main_layout)

        self.setCentralWidget(main_view)

        # TITLE BAR
        title_bar = QFrame()
        title_bar.setFixedSize(500, 36)
        vbox_main_layout.addWidget(title_bar)

        # TOP PART
        top_part = QFrame()
        top_part.setFixedHeight(238)
        top_part.setObjectName("TopPart")
        top_part.setStyleSheet(
            """QFrame#TopPart { background-image: url(Resources/images/backgrounds/prepare-top-part.png); }"""
        )
        vbox_main_layout.addWidget(top_part)

        # BOTTOM PART
        hbox_bottom_layout = QHBoxLayout()
        hbox_bottom_layout.setAlignment(QtCore.Qt.AlignTop)
        vbox_main_layout.addLayout(hbox_bottom_layout)

        parts_detail = {
            "Number": ["100090", "100060", "100035"],
            "Number of wells": ["96", "48", "24", "12", "6"],
            "Size (mm)": ["38000S2CL", "38000S6CL", "38000S8CL"]
        }
        for k, v in parts_detail.items():
            bottom_part_element = QWidget()

            vbox_bottom_part_layout = QVBoxLayout()
            vbox_bottom_part_layout.setAlignment(QtCore.Qt.AlignTop)
            bottom_part_element.setLayout(vbox_bottom_part_layout)

            bottom_part_element.setFixedSize(299, 176)
            hbox_bottom_layout.addWidget(bottom_part_element)
            hbox_bottom_layout.setSpacing(1)

            # TEXT
            label = QLabel()
            label.setText(k)
            label.setObjectName("PreparingWindowLabel")
            label.setStyleSheet(
                """QLabel#PreparingWindowLabel { font-size: 18px }""")
            vbox_bottom_part_layout.addWidget(label)

            combo_box = QComboBox()
            combo_box.setObjectName("PreparingWindowComboBox")
            combo_box.addItems(v)
            bottom_part_element.setStyleSheet(
                """QComboBox#PreparingWindowComboBox { background-color: white;
                                                        padding: 6px;
                                                        font-size: 18px}""")
            vbox_bottom_part_layout.addWidget(combo_box)
Exemplo n.º 26
0
    def out_frame_func(int_lng, prj_path, mesh_name_txt):
        obj = None

        #----------------Если файл initial.pkl существует, получаем данные из него для вывода в форму---------------#

        initial_path_file = prj_path + '/' + mesh_name_txt + '/' + 'initial.pkl'
        if os.path.exists(initial_path_file):
            input = open(initial_path_file, 'rb')
            obj = pickle.load(input)
            input.close()

            vertices_visible = True
            blocks_visible = True

            if obj['spe'] == True:
                edges_visible = True
            else:
                edges_visible = False

            if obj['spp'] == True:
                patches_visible = True
            else:
                patches_visible = False

            if obj['mpp'] == True:
                mergepatchpairs_visible = True
            else:
                mergepatchpairs_visible = False
        else:
            vertices_visible = False
            blocks_visible = False
            edges_visible = False
            patches_visible = False
            mergepatchpairs_visible = False

        #-----------------------Формируем внешний вид формы для файла initial.pkl----------------------#

        main_lbl = QLabel()

        cTM_lbl = QLabel()
        cTM_edit = QDoubleSpinBox()
        cTM_edit.setFixedSize(100, 22)
        if obj != None:
            cTM_edit.setValue(obj['cTM'])

        nov_lbl = QLabel()
        nov_edit = QSpinBox()
        nov_edit.setFixedSize(100, 22)
        nov_edit.setRange(1, 1000)
        if obj != None:
            nov_edit.setValue(obj['nov'])

        nob_lbl = QLabel()
        nob_edit = QSpinBox()
        nob_edit.setFixedSize(100, 22)
        nob_edit.setRange(1, 1000)
        if obj != None:
            nob_edit.setValue(obj['nob'])

        spe_lbl = QLabel()
        spe_edit = QCheckBox()
        if obj != None:
            if obj['spe'] == True:
                spe_edit.setChecked(True)
            elif obj['spe'] == False:
                spe_edit.setChecked(False)

        nospe_lbl = QLabel()
        nospe_lbl.setEnabled(False)
        nospe_edit = QSpinBox()
        nospe_edit.setFixedSize(100, 22)
        nospe_edit.setRange(1, 100)
        nospe_edit.setEnabled(False)
        if obj != None:
            if spe_edit.isChecked() == True:
                nospe_edit.setEnabled(True)
                nospe_edit.setValue(obj['nospe'])
                nospe_lbl.setEnabled(True)

        spp_lbl = QLabel()
        spp_edit = QCheckBox()
        if obj != None:
            if obj['spp'] == True:
                spp_edit.setChecked(True)
            elif obj['spp'] == False:
                spp_edit.setChecked(False)

        nop_lbl = QLabel()
        nop_lbl.setEnabled(False)
        nop_edit = QSpinBox()
        nop_edit.setFixedSize(100, 22)
        nop_edit.setRange(1, 1000)
        nop_edit.setEnabled(False)
        if obj != None:
            if spp_edit.isChecked() == True:
                nop_edit.setEnabled(True)
                nop_edit.setValue(obj['nop'])
                nop_lbl.setEnabled(True)

        mpp_lbl = QLabel()
        mpp_lbl.setEnabled(False)
        mpp_edit = QCheckBox()
        mpp_edit.setEnabled(False)
        if obj != None:
            if obj['mpp'] == True:
                mpp_lbl.setEnabled(True)
                mpp_edit.setEnabled(True)
                mpp_edit.setChecked(True)

        nompp_lbl = QLabel()
        nompp_lbl.setEnabled(False)
        nompp_edit = QSpinBox()
        nompp_edit.setFixedSize(100, 22)
        nompp_edit.setRange(1, 1000)
        nompp_edit.setEnabled(False)
        if obj != None:
            if mpp_edit.isChecked() == True:
                nompp_edit.setEnabled(True)
                nompp_edit.setValue(obj['nompp'])
                nompp_lbl.setEnabled(True)

        prs_grid = QGridLayout()
        prs_grid.addWidget(cTM_lbl, 0, 0)
        prs_grid.addWidget(cTM_edit, 0, 1)

        prs_grid.addWidget(nov_lbl, 1, 0)
        prs_grid.addWidget(nov_edit, 1, 1)

        prs_grid.addWidget(nob_lbl, 2, 0)
        prs_grid.addWidget(nob_edit, 2, 1)

        prs_grid.addWidget(spe_lbl, 3, 0)
        prs_grid.addWidget(spe_edit, 3, 1)
        prs_grid.addWidget(nospe_lbl, 3, 2)
        prs_grid.addWidget(nospe_edit, 3, 3)

        prs_grid.addWidget(spp_lbl, 4, 0)
        prs_grid.addWidget(spp_edit, 4, 1)
        prs_grid.addWidget(nop_lbl, 4, 2)
        prs_grid.addWidget(nop_edit, 4, 3)

        prs_grid.addWidget(mpp_lbl, 5, 0)
        prs_grid.addWidget(mpp_edit, 5, 1)
        prs_grid.addWidget(nompp_lbl, 5, 2)
        prs_grid.addWidget(nompp_edit, 5, 3)

        prs_frame = QFrame()
        prs_frame.setFixedSize(500, 150)
        prs_frame.setLayout(prs_grid)

        # -----------------------------Кнопка сохранения--------------------------#

        initial_btnSave = QPushButton()
        initial_btnSave.setFixedSize(80, 25)

        buttons_hbox = QHBoxLayout()
        buttons_hbox.addWidget(initial_btnSave)

        # --------------------Определяем параметры интерфейса окна---------#

        if int_lng == 'Russian':
            main_lbl.setText("Начальные данные")

            cTM_lbl.setText("Масштабный коэффициент:")
            cTM_edit.setToolTip(
                "Введите положительное, отрицательное целое или дробное число")

            nov_lbl.setText("Количество вершин:")
            nov_edit.setToolTip(
                "Количество вершин должно быть не меньше одной")

            nob_lbl.setText("Количество блоков:")
            nob_edit.setToolTip(
                "Количество блоков должно быть не менее одного")

            spe_lbl.setText("Изогнутые ребра:")
            spe_edit.setToolTip(
                "Установите флажок при наличии изогнутых ребер")
            nospe_lbl.setText("Количество:")
            nospe_edit.setToolTip(
                "Количество изогнутых ребер должно быть не менее одного")

            spp_lbl.setText("Патчи:")
            spp_edit.setToolTip("Установите флажок при наличии патчей")
            nop_lbl.setText("Количество:")
            nop_edit.setToolTip(
                "Количество патчей должно быть не менее одного")

            mpp_lbl.setText("Слияние граней:")
            mpp_edit.setToolTip("Установите флажок при слиянии патчей блоков")
            nompp_lbl.setText("Количество:")
            nompp_edit.setToolTip(
                "Количество слияний должно быть не менее одного")

            initial_btnSave.setText("Записать")

        elif int_lng == 'English':
            main_lbl.setText("Initial data")

            cTM_lbl.setText("Scale factor:")
            cTM_edit.setToolTip(
                "Enter a positive, negative integer or a fractional number")

            nov_lbl.setText("Number of vertices:")
            nov_edit.setToolTip("The number of vertices must be at least one")

            nob_lbl.setText("Number of blocks:")
            nob_edit.setToolTip("The number of blocks must be at least one")

            spe_lbl.setText("Curved edges:")
            spe_edit.setToolTip("Check the box if you have curved edges")
            nospe_lbl.setText("Number:")
            nospe_edit.setToolTip(
                "The number of curved edges must be at least one")

            spp_lbl.setText("Patches:")
            spp_edit.setToolTip("Check the box if you have patches")
            nop_lbl.setText("Number:")
            nop_edit.setToolTip("The number of patches must be at least one")

            mpp_lbl.setText("Merging faces:")
            mpp_edit.setToolTip("Check the box when merging patch blocks")
            nompp_lbl.setText("Number:")
            nompp_edit.setToolTip("The number of mergers must be at least one")

            initial_btnSave.setText("Write")

# -------------------------Групповой элемент формы---------------------------#

        initial_grid = QGridLayout()
        initial_grid.addWidget(main_lbl, 0, 0, alignment=QtCore.Qt.AlignCenter)
        initial_grid.addWidget(prs_frame,
                               1,
                               0,
                               alignment=QtCore.Qt.AlignCenter)
        initial_grid.addLayout(buttons_hbox,
                               2,
                               0,
                               alignment=QtCore.Qt.AlignCenter)
        initial_grid.setRowStretch(3, 6)

        initial_group = QGroupBox()
        initial_group.setLayout(initial_grid)

        return initial_group, spe_edit, nospe_lbl, nospe_edit, initial_btnSave, cTM_edit, nov_edit, spp_edit, nop_lbl, nop_edit, nob_edit, mpp_lbl, mpp_edit, nompp_lbl, nompp_edit, vertices_visible, blocks_visible, edges_visible, patches_visible, mergepatchpairs_visible
Exemplo n.º 27
0
    def initUI(self):

      # ======================== WIDGETS ===========================

        framePrincipal = QFrame(self)
        framePrincipal.setFrameShape(QFrame.Box)
        framePrincipal.setFrameShadow(QFrame.Sunken)
        framePrincipal.setAutoFillBackground(True)
        framePrincipal.setBackgroundRole(QPalette.Light)
        framePrincipal.setFixedSize(640,480)
        framePrincipal.move(10, 10)
        frame = QFrame(framePrincipal)
        frame.setFixedSize(2000, 2000)
        frame.move(10, 10)

        self.labelImagen = QLabel(frame)
        self.labelImagen.setAlignment(Qt.AlignCenter)
        self.labelImagen.setGeometry(0, 0, 640, 480)        
        self.labelImagenUno = QLabel(frame)
        self.labelImagenUno.setAlignment(Qt.AlignCenter)
        self.labelImagenUno.setGeometry(-650, 0, 640, 480)

      # =================== BOTONES (QPUSHBUTTON) ==================

        self.buttonCargar = QPushButton("Cargar imagen", self)
        self.buttonCargar.setCursor(Qt.PointingHandCursor)
        self.buttonCargar.setFixedSize(100, 30)
        self.buttonCargar.move(10, 519)
        self.buttonEliminar = QPushButton("Eliminar imagen", self)
        self.buttonEliminar.setCursor(Qt.PointingHandCursor)
        self.buttonEliminar.setFixedSize(100, 30)
        self.buttonEliminar.move(120, 519)
        self.buttonAnterior = QPushButton("<", self)
        self.buttonAnterior.setObjectName("Anterior")
        self.buttonAnterior.setToolTip("Imagen anterior")
        self.buttonAnterior.setCursor(Qt.PointingHandCursor)
        self.buttonAnterior.setFixedSize(30, 30)
        self.buttonAnterior.move(230, 519)        
        self.buttonSiguiente = QPushButton(">", self)
        self.buttonSiguiente.setObjectName("Siguiente")
        self.buttonSiguiente.setToolTip("Imagen siguiente")
        self.buttonSiguiente.setCursor(Qt.PointingHandCursor)
        self.buttonSiguiente.setFixedSize(30, 30)
        self.buttonSiguiente.move(265, 519)

        self.buttonCarpeta1= QPushButton("Carpeta 1", self)
        self.buttonCarpeta1.setObjectName("Carpeta1")
        self.buttonCarpeta1.setToolTip("Guardar en Carpeta 1")
        self.buttonCarpeta1.setCursor(Qt.PointingHandCursor)
        self.buttonCarpeta1.setFixedSize(160,30)
        self.buttonCarpeta1.move(300,519)

        self.buttonCarpeta2= QPushButton("Carpeta 2", self)
        self.buttonCarpeta2.setObjectName("Carpeta2")
        self.buttonCarpeta2.setToolTip("Guardar en Carpeta 2")
        self.buttonCarpeta2.setCursor(Qt.PointingHandCursor)
        self.buttonCarpeta2.setFixedSize(160,30)
        self.buttonCarpeta2.move(465,519)

      # ===================== CONECTAR SEÑALES =====================

        self.buttonCargar.clicked.connect(self.Cargar)
        self.buttonEliminar.clicked.connect(self.Eliminar)
        self.buttonAnterior.clicked.connect(self.anteriorSiguiente)
        self.buttonSiguiente.clicked.connect(self.anteriorSiguiente)
        self.buttonCarpeta1.clicked.connect(self.GuardarCarpeta1)
        self.buttonCarpeta2.clicked.connect(self.GuardarCarpeta2)
    

        # Establecer los valores predeterminados

        self.posicion = int
        self.estadoAnterior, self.estadoSiguiente = False, False
        self.carpetaActual = QDir()
        self.imagenesCarpeta = []
Exemplo n.º 28
0
class GuiMain(object):
    """
    Static GUI class
    See module docstring for explanation.
    """
    def setupUi(self, MainWindow):
        """
        __init__
        :param MainWindow: mainwindow object called in guis_event_handler.py
        """
        # Presets
        self._presets(MainWindow)

        # Main Frames
        # ***********************************************************
        self._main_frame()
        # ***********************************************************

        # Left Side
        # ***********************************************************
        self._left_side()
        # ***********************************************************

        # ***********************************************************
        # Right Side
        self._right_side()
        # ***********************************************************

        # Postsets
        self._postsets()

    def _main_frame(self):
        """
        Main layout and frame.
        Separation in left and right side.
        """
        self.MainWindow.resize(1200, 900)
        self.MainWindow.setWindowTitle("NOViZ")
        self.centralwidget = QWidget(self.MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.MainWindow.setWindowIcon(QIcon(module_dir +
                                            'gui_imgs/NoviZ4.png'))

        # menu layout
        self.verticalLayout_menu = QVBoxLayout(self.centralwidget)
        self.verticalLayout_menu.setObjectName("verticalLayout_menu")
        self._add_menus_on_top()

        # main layout
        self.horizontalLayout_main = QHBoxLayout()
        self.horizontalLayout_main.setObjectName("verticalLayout_menu")
        self.verticalLayout_menu.addLayout(self.horizontalLayout_main)

        # left frame and left layout
        self.frame_left = QFrame()
        self.frame_left.setObjectName("frame_left")
        self.frame_left.setFrameShape(QFrame.StyledPanel)
        self.frame_left.setFrameShadow(QFrame.Plain)
        self.frame_left.setLineWidth(10)
        self.verticalLayout_left = QVBoxLayout(self.frame_left)
        self.verticalLayout_left.setObjectName("verticalLayout_left")
        self.horizontalLayout_main.addWidget(self.frame_left)

        # right frame and right layout
        self.frame_right = QFrame()
        self.frame_right.setObjectName("frame_right")
        self.frame_right.setFrameShape(QFrame.StyledPanel)
        self.frame_right.setFrameShadow(QFrame.Plain)
        self.frame_right.setLineWidth(10)
        self.verticalLayout_right = QVBoxLayout(self.frame_right)
        self.verticalLayout_right.setObjectName("verticalLayout_right")
        self.verticalLayout_right.setSizeConstraint(4)
        self.horizontalLayout_main.addWidget(self.frame_right)

    def _add_menus_on_top(self):
        """
        init main menu
        """
        # set up menu bar
        self.main_menu = QMenuBar()
        self.main_menu.setObjectName("main_menu")
        self.verticalLayout_menu.addWidget(self.main_menu)
        # menu entrys
        #   file menu
        self.file_menu = self.main_menu.addMenu('File')
        self.file_menu.setObjectName("file_menu")
        #       save
        self.menu_file_save = QAction("Save")
        self.menu_file_save.setShortcut('Ctrl+S')
        self.menu_file_save.setStatusTip('Save current image')
        self.menu_file_save.setObjectName("menu_file_save")
        self.file_menu.addAction(self.menu_file_save)
        #       exit
        self.menu_file_exit = QAction("Exit")
        self.menu_file_exit.setShortcut('Ctrl+Q')
        self.menu_file_exit.setStatusTip('Exit application')
        self.menu_file_exit.setObjectName("menu_file_exit")
        self.file_menu.addAction(self.menu_file_exit)

        #   view menu
        self.view_menu = self.main_menu.addMenu('View')
        self.view_menu.setObjectName("view_menu")
        #   tracing
        self.menu_view_trace = QAction("Focus tracing")
        self.menu_view_trace.setShortcut('Ctrl+Alt+T')
        self.menu_view_trace.setStatusTip("Trace current point")
        self.menu_view_trace.setObjectName("menu_view_trace")
        self.view_menu.addAction(self.menu_view_trace)
        #    dark theme
        self.menu_view_theme = QAction("Dark theme")
        self.menu_view_theme.setShortcut('Ctrl+Alt+D')
        self.menu_view_theme.setStatusTip("Activate dark theme")
        self.menu_view_theme.setObjectName("menu_view_theme")
        self.view_menu.addAction(self.menu_view_theme)

        #   settings menu
        self.settings_menu = self.main_menu.addMenu('Settings')
        self.settings_menu.setObjectName("settings_menu")
        #       figure setup
        self.menu_settings_figure = QAction("Figure setup")
        self.menu_settings_figure.setShortcut('Ctrl+Alt+F')
        self.menu_settings_figure.setStatusTip('Figure setup')
        self.menu_settings_figure.setObjectName("menu_settings_figure")
        self.settings_menu.addAction(self.menu_settings_figure)
        #       plot setup
        self.menu_settings_plot = QAction("Plot setup")
        self.menu_settings_plot.setShortcut('Ctrl+Alt+P')
        self.menu_settings_plot.setStatusTip('Plot setup')
        self.menu_settings_plot.setObjectName("menu_settings_plot")
        self.settings_menu.addAction(self.menu_settings_plot)
        self.settings_menu.addSeparator()
        #       start point
        self.menu_start_point = QAction("Start point")
        self.menu_start_point.setShortcut('Ctrl+Alt+S')
        self.menu_start_point.setStatusTip('Set start point')
        self.menu_start_point.setObjectName("menu_start_point")
        self.settings_menu.addAction(self.menu_start_point)
        #       speed
        self.menu_speed = QAction("Animation Speed")
        self.menu_speed.setShortcut('Ctrl+Alt+.')
        self.menu_speed.setStatusTip('Set animatio speed')
        self.menu_speed.setObjectName('menu_speed')
        self.settings_menu.addAction(self.menu_speed)

        #   help menu
        self.help_menu = self.main_menu.addMenu('Help')
        self.help_menu.setObjectName("help_menu")
        #       Manual
        self.menu_settings_manual = QAction("Manual")
        self.menu_settings_manual.setShortcut('Ctrl+Alt+M')
        self.menu_settings_manual.setStatusTip('Open Manual')
        self.menu_settings_manual.setObjectName("menu_settings_manual")
        self.help_menu.addAction(self.menu_settings_manual)
        #       About
        self.menu_settings_about = QAction("About")
        self.menu_settings_about.setShortcut('Ctrl+Alt+A')
        self.menu_settings_about.setStatusTip('About this Programm')
        self.menu_settings_about.setObjectName("menu_settings_about")
        self.help_menu.addAction(self.menu_settings_about)

    def _left_side(self):
        """
        Init left side objects:
        - Plot canvas
        - Player and settings buttons in layout and frame
        """
        # plot label
        #   Input layout for matplotlib canvas object
        self.verticalLayout_plot_canvas = QVBoxLayout()
        self.verticalLayout_plot_canvas.setObjectName(
            "verticalLayout_plot_canvas")
        self.verticalLayout_left.addLayout(self.verticalLayout_plot_canvas)

        # player button frame and layout
        self.frame_playerbuttons = QFrame()
        self.frame_playerbuttons.setObjectName("frame_playerbuttons")
        self.frame_playerbuttons.setFrameShape(QFrame.StyledPanel)
        self.frame_playerbuttons.setFrameShadow(QFrame.Plain)
        self.frame_playerbuttons.setLineWidth(10)
        self.verticalLayout_left.addWidget(self.frame_playerbuttons)
        self.verticalLayout_playerbottons = QHBoxLayout(
            self.frame_playerbuttons)
        self.verticalLayout_playerbottons.setObjectName(
            "verticalLayout_playerbottons")

        self._add_player_buttons()

    def _right_side(self):
        """
        Init right side objects:
        - function / method combo boxes with layout and frames
        - function parameter display and button with layout and frame
        - method parameter display and button with layout and frame
        - pseudocode display
        - go and reset button with layput and frame
        """
        # combo boxes frame and layouts
        #   function/method
        self.frame_combo_boxes = QFrame()
        self.frame_combo_boxes.setObjectName("frame_combo_boxes")
        self.frame_combo_boxes.setFrameShape(QFrame.StyledPanel)
        self.frame_combo_boxes.setFrameShadow(QFrame.Plain)
        self.frame_combo_boxes.setLineWidth(10)
        self.frame_combo_boxes.setFixedSize(200, 70)
        self.verticalLayout_right.addWidget(self.frame_combo_boxes)
        self.verticalLayout_combo_boxes = QVBoxLayout(self.frame_combo_boxes)
        self.verticalLayout_combo_boxes.setObjectName(
            "verticalLayout_combo_boxes")
        #   inner combo box frame layouts
        self.horizontalLayout_function = QHBoxLayout()
        self.horizontalLayout_function.setObjectName(
            "horizontalLayout_function")
        self.verticalLayout_combo_boxes.addLayout(
            self.horizontalLayout_function)
        self.horizontalLayout_method = QHBoxLayout()
        self.horizontalLayout_method.setObjectName("horizontalLayout_method")
        self.verticalLayout_combo_boxes.addLayout(self.horizontalLayout_method)
        #   combo box and label function
        self.label_function = QLabel()
        self.label_function.setObjectName("label_function")
        self.label_function.setText("Function:")
        self.horizontalLayout_function.addWidget(self.label_function)
        self.horizontalLayout_function.setObjectName("label_function")
        self.comboBox_function = QComboBox(self.centralwidget)
        self.comboBox_function.setObjectName("comboBox_function")
        self.comboBox_function.addItem("")
        self.horizontalLayout_function.addWidget(self.comboBox_function)
        #   combo box and label method
        self.label_method = QLabel()
        self.label_function.setObjectName("label_method")
        self.label_method.setText("Method:")
        self.horizontalLayout_method.addWidget(self.label_method)
        self.horizontalLayout_method.setObjectName("horizontalLayout_method")
        self.comboBox_method = QComboBox(self.centralwidget)
        self.comboBox_method.setObjectName("comboBox_method")
        self.comboBox_method.addItem("")
        self.horizontalLayout_method.addWidget(self.comboBox_method)

        # start point
        #   frame and layout
        self.frame_start_point = QFrame()
        self.frame_start_point.setObjectName("frame_start_point")
        self.frame_start_point.setFrameShape(QFrame.StyledPanel)
        self.frame_start_point.setFrameShadow(QFrame.Plain)
        self.frame_start_point.setLineWidth(10)
        self.frame_start_point.setFixedSize(200, 40)
        self.verticalLayout_right.addWidget(self.frame_start_point)
        self.horizontalLayout_start_point = QHBoxLayout(self.frame_start_point)
        self.horizontalLayout_start_point.setObjectName(
            "horizontalLayout_start_point")
        #   button
        self.button_set_start_point = QPushButton()
        self.button_set_start_point.setObjectName("button_set_start_point")
        self.button_set_start_point.setText("Set start point")
        self.horizontalLayout_start_point.addWidget(
            self.button_set_start_point)
        #   label
        self.label_start_point = QLabel()
        self.label_start_point.setObjectName("label_start_point")
        self.label_start_point.setAlignment(Qt.AlignCenter)
        self.horizontalLayout_start_point.addWidget(self.label_start_point)

        # function parameters
        #   function parameters frame and layout
        self.frame_function_parameters = QFrame()
        self.frame_function_parameters.setObjectName(
            "frame_function_parameters")
        self.frame_function_parameters.setFrameShape(QFrame.StyledPanel)
        self.frame_function_parameters.setFrameShadow(QFrame.Plain)
        self.frame_function_parameters.setLineWidth(10)
        self.frame_function_parameters.setFixedSize(200, 150)
        self.verticalLayout_right.addWidget(self.frame_function_parameters)
        self.verticalLayout_function_parameters = QVBoxLayout(
            self.frame_function_parameters)
        self.verticalLayout_function_parameters.setObjectName(
            "verticalLayout_function_parameters")
        #   function parameter label
        self.label_function_parameters = QLabel()
        self.label_function_parameters.setObjectName(
            "label_function_parameters")
        self.label_function_parameters.setText("Parameterized function:")
        self.verticalLayout_function_parameters.addWidget(
            self.label_function_parameters)
        self.label_function_parameters_show = QLabel()
        self.label_function_parameters_show.setObjectName(
            "label_function_parameters_show")
        self.label_function_parameters_show.setFont(self.italic_font)
        self.label_function_parameters_show.setText("    not set yet")
        self.label_function_parameters_show.setFixedHeight(80)
        self.verticalLayout_function_parameters.addWidget(
            self.label_function_parameters_show)
        #   with scrolling
        self.scroll_area_label_function = QScrollArea()
        self.scroll_area_label_function.setObjectName(
            "scroll_area_label_function")
        self.scroll_area_label_function.setWidgetResizable(True)
        self.scroll_area_label_function.setFixedHeight(80)
        self.scroll_area_label_function.setWidget(
            self.label_function_parameters_show)
        self.verticalLayout_function_parameters.addWidget(
            self.scroll_area_label_function)
        #   function parameter button
        self.button_function_parameter = QPushButton()
        self.button_function_parameter.setObjectName(
            "button_function_parameter")
        self.button_function_parameter.setText("Set Parameters")
        self.verticalLayout_function_parameters.addWidget(
            self.button_function_parameter)

        # method parameters
        #   method parameters frame and layout
        self.frame_method_parameters = QFrame()
        self.frame_method_parameters.setObjectName("frame_method_parameters")
        self.frame_method_parameters.setFrameShape(QFrame.StyledPanel)
        self.frame_method_parameters.setFrameShadow(QFrame.Plain)
        self.frame_method_parameters.setLineWidth(10)
        self.frame_method_parameters.setFixedSize(200, 150)
        self.verticalLayout_right.addWidget(self.frame_method_parameters)
        self.verticalLayout_method_parameters = QVBoxLayout(
            self.frame_method_parameters)
        self.verticalLayout_method_parameters.setObjectName(
            "verticalLayout_method_parameters")
        #   method parameter label
        self.label_method_parameters = QLabel()
        self.label_method_parameters.setObjectName("label_method_parameters")
        self.label_method_parameters.setText("Method parameters:")
        self.verticalLayout_method_parameters.addWidget(
            self.label_method_parameters)
        self.label_method_parameters_show = QLabel()
        self.label_method_parameters_show.setObjectName(
            "label_method_parameters_show")
        self.label_method_parameters_show.setFont(self.italic_font)
        self.label_method_parameters_show.setText("    not set yet")
        self.label_method_parameters_show.setFixedHeight(80)
        self.verticalLayout_method_parameters.addWidget(
            self.label_method_parameters_show)
        #   with scrolling
        self.scroll_area_label_method = QScrollArea()
        self.scroll_area_label_method.setObjectName("scroll_area_label_method")
        self.scroll_area_label_method.setWidgetResizable(True)
        self.scroll_area_label_method.setFixedHeight(80)
        self.scroll_area_label_method.setWidget(
            self.label_method_parameters_show)
        self.verticalLayout_method_parameters.addWidget(
            self.scroll_area_label_method)
        #   method parameter button
        self.button_method_parameter = QPushButton()
        self.button_method_parameter.setObjectName("button_method_parameter")
        self.button_method_parameter.setText("Set Parameters")
        self.verticalLayout_method_parameters.addWidget(
            self.button_method_parameter)

        # pseudocode
        self.label_animation_pseudocode = PseudocodeHighlightAnimation()
        self.label_animation_pseudocode.setObjectName(
            "label_animation_pseudocode")
        self.verticalLayout_right.addWidget(self.label_animation_pseudocode)

        # show and reset button frame and layout
        self.frame_show_reset = QFrame()
        self.frame_show_reset.setObjectName("frame_show_reset")
        self.frame_show_reset.setFrameShape(QFrame.StyledPanel)
        self.frame_show_reset.setFrameShadow(QFrame.Plain)
        self.frame_show_reset.setLineWidth(10)
        self.frame_show_reset.setFixedSize(200, 90)
        self.verticalLayout_right.addWidget(self.frame_show_reset)
        self.verticalLayout_show_reset = QVBoxLayout(self.frame_show_reset)
        self.verticalLayout_show_reset.setObjectName(
            "verticalLayout_show_reset")
        #   show button
        self.button_calculate = QPushButton()
        self.button_calculate.setObjectName("button_calculate")
        self.verticalLayout_show_reset.addWidget(self.button_calculate)
        self.button_calculate.setText('Calculate')
        #   reset button
        self.button_reset = QPushButton()
        self.button_reset.setObjectName("button_reset")
        self.verticalLayout_show_reset.addWidget(self.button_reset)
        self.button_reset.setText('Reset')

    def _add_player_buttons(self):
        """
        Init 'media' player buttons as well as all other buttons in this frame
        """
        # player buttons size policy
        self.button_policy = QSizePolicy(QSizePolicy.MinimumExpanding,
                                         QSizePolicy.MinimumExpanding)

        # first button
        self.button_first = QPushButton(self.centralwidget)
        self.button_first.setObjectName("button_first")
        self.first_icon = QIcon(module_dir + 'gui_imgs/first.png')
        self.button_first.setIcon(self.first_icon)
        self.button_first.setIconSize(QSize(35, 35))
        self.button_first.setFlat(True)
        self.verticalLayout_playerbottons.addWidget(self.button_first,
                                                    alignment=Qt.AlignRight)

        # previous button
        self.button_prev = QPushButton(self.centralwidget)
        self.button_prev.setObjectName("button_prev")
        self.prev_icon = QIcon(module_dir + 'gui_imgs/prev.png')
        self.button_prev.setIcon(self.prev_icon)
        self.button_prev.setIconSize(QSize(50, 50))
        self.button_prev.setFlat(True)
        self.verticalLayout_playerbottons.addWidget(self.button_prev,
                                                    alignment=Qt.AlignLeft)

        # play / pause button
        self.button_play_pause = QPushButton(self.centralwidget)
        self.button_play_pause.setObjectName("button_play_pause")
        self.button_play_pause_icon = QIcon(module_dir + 'gui_imgs/play.png')
        self.button_play_pause.setIcon(self.button_play_pause_icon)
        self.button_play_pause.setIconSize(QSize(55, 55))
        self.button_play_pause.setFlat(True)
        self.verticalLayout_playerbottons.addWidget(self.button_play_pause,
                                                    alignment=Qt.AlignCenter)

        # next button
        self.button_next = QPushButton(self.centralwidget)
        self.button_next.setObjectName("button_next")
        self.next_icon = QIcon(module_dir + 'gui_imgs/next.png')
        self.button_next.setIcon(self.next_icon)
        self.button_next.setIconSize(QSize(50, 50))
        self.button_next.setFlat(True)
        self.verticalLayout_playerbottons.addWidget(self.button_next,
                                                    alignment=Qt.AlignRight)

        # last button
        self.button_last = QPushButton(self.centralwidget)
        self.button_last.setObjectName("button_last")
        self.last_icon = QIcon(module_dir + 'gui_imgs/last.png')
        self.button_last.setIcon(self.last_icon)
        self.button_last.setIconSize(QSize(35, 35))
        self.button_last.setFlat(True)
        self.verticalLayout_playerbottons.addWidget(self.button_last,
                                                    alignment=Qt.AlignLeft)

        # array position and xy mouse coords
        self.verticalLayout_pos_xy = QVBoxLayout()
        self.verticalLayout_pos_xy.setObjectName("verticalLayout_pos_xy")
        self.verticalLayout_playerbottons.addLayout(self.verticalLayout_pos_xy)
        #   array position
        self.horizontalLayout_array_position = QHBoxLayout()
        self.horizontalLayout_array_position.setObjectName(
            "horizontalLayout_startpoint")
        self.horizontalLayout_array_position.setSizeConstraint(
            QVBoxLayout.SetFixedSize)
        self.verticalLayout_pos_xy.addLayout(
            self.horizontalLayout_array_position)
        #   array position spinbox
        self.spinbox_currentposition = QSpinBox()
        self.spinbox_currentposition.setObjectName("spinbox_currentposition")
        self.spinbox_currentposition.setValue(0)
        self.spinbox_currentposition.setMaximum(0)
        self.horizontalLayout_array_position.addWidget(
            self.spinbox_currentposition)
        #   array length lable
        self.label_arraylength = QLabel()
        self.label_arraylength.setObjectName("label_arraylength")
        self.label_arraylength.setText("/ -")
        self.horizontalLayout_array_position.addWidget(self.label_arraylength)
        #   xy cords
        self.label_xy = QLabel()
        self.label_xy.setObjectName("label_xy")
        self.label_xy.setText("x: | y:")
        self.verticalLayout_pos_xy.addWidget(self.label_xy)

        # speed control
        self.verticalLayout_speed = QVBoxLayout()
        self.verticalLayout_playerbottons.addLayout(self.verticalLayout_speed)
        #   slow fast label
        self.label_speed = QLabel()
        self.label_speed.setText("slow             fast")
        self.label_speed.setAlignment(Qt.AlignBottom)
        self.verticalLayout_speed.addWidget(self.label_speed)
        #   slider
        self.slider_speed = QSlider(Qt.Horizontal)
        self.slider_speed.setObjectName("slider_speed")
        self.slider_speed.setTickInterval(25)
        self.slider_speed.setFixedSize(75, 20)
        self.slider_speed.setSingleStep(1)
        self.slider_speed.setValue(50)
        self.slider_speed.setTickPosition(QSlider.NoTicks)
        self.verticalLayout_speed.addWidget(self.slider_speed)

    def _presets(self, MainWindow):
        """
        Helper variables to be used in object inits
        :param MainWindow: MainWindow object. see main.py and guis_event_handler.py for further information
        """
        self.italic_font = QFont()
        self.italic_font.setItalic(True)
        self.non_italic_font = QFont()
        self.non_italic_font.setItalic(False)

        self.MainWindow = MainWindow

    def _postsets(self):
        """
        No Idea what this is doing
        """
        self.MainWindow.setCentralWidget(self.centralwidget)
        self.statusbar = QStatusBar(self.MainWindow)
        self.statusbar.setObjectName("statusbar")
        self.MainWindow.setStatusBar(self.statusbar)
        QMetaObject.connectSlotsByName(self.MainWindow)

    def set_pseudocode(self, pseudocode_pos):
        """
        Sets the pseudo code picture anew
        :param pseudocode_pos: current pseudo code line number
        """
        self.label_animation_pseudocode.move(pseudocode_pos)
Exemplo n.º 29
0
class MainWindow(QMainWindow):
    def reset_canvas_action(self):

        self.item_cnt = 0
        self.canvas_widget.reset_canvas()
        #self.list_widget.clear()
        self.list_widget.currentTextChanged.disconnect(
            self.canvas_widget.selection_changed)
        self.list_widget.clear()
        self.list_widget.currentTextChanged.connect(
            self.canvas_widget.selection_changed)

        self.scene = QGraphicsScene(self)
        self.scene.setSceneRect(1, 1, 601, 601)  #挪一个像素,不然会有边框线
        self.item_cnt = 0
        self.statusBar().showMessage('重置画布')

        self.canvas_widget.setScene(self.scene)
        #self.canvas_widget = MyCanvas(self.scene, self.Image_window)

        #解决了一个bug参考 https://blog.csdn.net/yaowangII/article/details/80929261
    def save_canvas_action(self):
        # pixMap = view->grab(view->sceneRect().toRect());
        # QString
        # fileName = QFileDialog::getSaveFileName(this, "Save image",
        #                                         QCoreApplication::applicationDirPath(), "BMP Files (*.bmp);;JPEG (*.JPEG);;PNG (*.png)" );
        # filename=QFileDialog.getSaveFileName("Save image",QCoreApplication.applicationDirPath(),"BMP Files (*.bmp);;JPEG (*.JPEG);;PNG (*.png)")
        filename, ok2 = QFileDialog.getSaveFileName(
            self, "Save Image", QDir.currentPath(),
            "BMP Files (*.bmp);;JPEG (*.JPEG);;PNG (*.png)")

        #
        pixmap = QPixmap()
        pixmap = self.canvas_widget.grab(
            self.canvas_widget.sceneRect().toRect())
        pixmap.save(filename)

    def theme1_action(self):
        self.setStyleSheet(css1)

    def theme2_action(self):
        self.setStyleSheet(css2)

    def Menu_init(self):
        menubar = self.menuBar()
        # 菜单栏
        mfile = menubar.addMenu("文件")
        themefile = menubar.addMenu("主题")
        # 重置
        reset_canvas_act = QAction(QIcon("./icon/file.png"), "重置画布", self)

        reset_canvas_act.triggered.connect(
            self.reset_canvas_action)  # To be done

        # 保存
        save_canvas_act = QAction(QIcon("./icon/save.png"), "保存画布", self)
        save_canvas_act.triggered.connect(self.save_canvas_action)

        #默认主题:
        theme1_act = QAction("Blue theme", self)
        theme1_act.triggered.connect(self.theme1_action)
        theme2_act = QAction("Coffee theme", self)
        theme2_act.triggered.connect(self.theme2_action)
        # 将action添加到file上面
        mfile.addAction(reset_canvas_act)
        mfile.addAction(save_canvas_act)
        #将action添加到theme上面
        themefile.addAction(theme1_act)
        themefile.addAction(theme2_act)
        # 工具栏
        toolbar = QToolBar()
        toolbar.setMovable(False)
        self.addToolBar(toolbar)
        toolbar.addAction(reset_canvas_act)
        toolbar.addAction(save_canvas_act)

    def pen_width(self):
        w = self.spinbox_penwidth.text()
        w = int(w)
        # print("w:" + w)
        self.canvas_widget.setpenWidth(w)
        self.statusBar().showMessage('宽度为%d' % (w))

    def pen_color(self):
        c = QColorDialog.getColor()
        self.frame_color.setPalette(QPalette(c))
        # assert(0)
        self.frame_color.setStyleSheet("QWidget { background-color: %s }" %
                                       c.name())
        # self.frame_color.setStyleSheet("QFrame{background-color: rgba("+c.red()+","+c.green()+","+c.blue()+",1);border:none}")
        # print(c.red())
        # 参考了https://www.cnblogs.com/icat-510/p/10166882.html
        self.canvas_widget.setpenColor(c)

    def Color_init(self):
        colorbar = QToolBar("画笔属性栏")
        self.addToolBar(colorbar)
        colorbar.setMovable(True)

        label_penwidth = QLabel("画笔宽度")
        self.spinbox_penwidth = QSpinBox()
        self.spinbox_penwidth.setRange(1, 50)
        self.spinbox_penwidth.setValue(2)

        self.color_botton = QPushButton("画笔颜色")
        self.frame_color = QFrame(self)
        self.frame_color.setObjectName("colorframe")
        self.frame_color.setFrameShape(QFrame.Box)
        self.frame_color.setPalette(QPalette(Qt.black))
        self.frame_color.setAutoFillBackground(True)
        self.frame_color.setFixedSize(30, 30)
        self.frame_color.setStyleSheet(
            "QFrame{background-color: rgba(0,0,0,1);border:none}")

        # 槽函数
        self.spinbox_penwidth.valueChanged[int].connect(self.pen_width)
        self.color_botton.clicked.connect(self.pen_color)

        # 布局
        color_layout = QHBoxLayout()
        color_layout.setAlignment(Qt.AlignLeft)

        color_layout.addWidget(label_penwidth)
        color_layout.addWidget(self.spinbox_penwidth)
        color_layout.addWidget(self.color_botton)
        color_layout.addWidget(self.frame_color)

        color_widget = QWidget()
        color_widget.setLayout(color_layout)
        colorbar.addWidget(color_widget)

    def layout_init(self):
        # p=self.takeCentralWidget()
        self.setDockNestingEnabled(True)  # 允许嵌套

        self.Tool_window = QDockWidget("工具栏")

        self.setCentralWidget(self.Image_window)
        self.addDockWidget(Qt.TopDockWidgetArea, self.Tool_window)
        self.addDockWidget(Qt.RightDockWidgetArea, self.List_window)

    def line_action(self, algorithm):
        self.canvas_widget.start_draw_line(algorithm, self.get_id())
        self.statusBar().showMessage(algorithm + '算法绘制线段:左键点击绘制,松开结束')
        self.list_widget.clearSelection()
        self.canvas_widget.clear_selection()

    def DDA_line_draw_action(self):
        self.line_action('DDA')

    def Bresenham_line_draw_action(self):
        self.line_action('Bresenham')

    def polygon_action(self, algorithm):
        self.canvas_widget.start_draw_polygon(algorithm, self.get_id())
        self.statusBar().showMessage(algorithm +
                                     '算法绘制多边形:左键点击设置控制点,右键或者切换其他工具栏图标结束')
        self.list_widget.clearSelection()
        self.canvas_widget.clear_selection()

    def DDA_polygon_draw_action(self):
        self.polygon_action('DDA')

    def Bresenham_polygon_draw_action(self):
        self.polygon_action('Bresenham')

    def ellipse_draw_action(self):
        self.canvas_widget.start_draw_ellipse(self.get_id())
        self.statusBar().showMessage('中心圆算法绘制椭圆:左键点击设置控制点1,拖动松开后设置控制点2,完成绘制')
        self.list_widget.clearSelection()
        self.canvas_widget.clear_selection()

    def curve_draw_action(self, algorithm):
        self.canvas_widget.start_draw_curve(algorithm, self.get_id())
        self.statusBar().showMessage(algorithm +
                                     '算法绘制曲线:左键点击设置控制点,右键或者点击其他工具栏图标结束绘制')
        self.list_widget.clearSelection()
        self.canvas_widget.clear_selection()

    def Bezier_curve_draw_action(self):
        self.curve_draw_action('Bezier')

    def B_spline_curve_draw_action(self):
        self.curve_draw_action('B-spline')

    def translate_draw_action(self):
        self.canvas_widget.start_draw_translate()
        self.statusBar().showMessage('平移图元:选择图元之后任意拖动,松开结束')
        # self.list_widget.clearSelection()
        # self.canvas_widget.clear_selection()

    def rotate_draw_action(self):
        self.canvas_widget.start_draw_rotate()
        self.statusBar().showMessage('旋转图元:选择图元之后任意旋转,松开结束')

    def scale_draw_action(self):

        self.canvas_widget.start_draw_scale()
        self.statusBar().showMessage('缩放图元:选择图元之后任意移动,松开结束')

    def clip_draw_action(self, algorithm):
        self.canvas_widget.start_draw_clip(algorithm)
        self.statusBar().showMessage(algorithm +
                                     '裁剪线段:选择线段图元之后,左键点击拖动得到红色的裁剪框,松开结束')

    def Cohen_Sutherland_clip_draw_action(self):
        self.clip_draw_action("Cohen-Sutherland")

    def Liang_Barsky_clip_draw_action(self):
        self.clip_draw_action("Liang-Barsky")

    def cursor_draw_action(self):
        self.canvas_widget.start_cursor_selection()
        self.statusBar().showMessage('鼠标选择:左键点击任意图元进行选择')

    def fill_draw_action(self):
        self.canvas_widget.start_fill_polygon()
        self.statusBar().showMessage('多边形填充:选择多边形图元之后根据颜色框颜色填充')

    def polygon_clip_draw_action(self):
        self.canvas_widget.start_cut_polygon()
        self.statusBar().showMessage('多边形裁剪:选择多边形图元之后左键点击拖动得到绿色裁剪框进行裁剪')

    def x_mirror_draw_action(self):
        self.canvas_widget.start_x_mirror_draw()
        self.statusBar().showMessage('水平方向镜像:选择图元之后点击按钮')

    def y_mirror_draw_action(self):
        self.canvas_widget.start_y_mirror_draw()
        self.statusBar().showMessage('竖直方向镜像:选择图元之后点击按钮')

    def copy_draw_action(self):
        self.canvas_widget.start_copy_draw(self.get_id())
        self.statusBar().showMessage('复制粘贴:选择图元之后点击按钮,在原位置复制')

    def delete_draw_action(self):
        self.canvas_widget.start_delete_draw()
        self.statusBar().showMessage('删除图元:选择图元之后点击按钮删除')

    def tool_init(self):
        # line相关,使用的https://www.walletfox.com/course/customqtoolbutton.php做的可选算法button
        self.line_action_1 = QAction("DDA line")
        self.line_action_2 = QAction("Bresenham line")
        self.line_action_1.setIcon(QIcon("./icon/line.png"))
        self.line_action_2.setIcon(QIcon("./icon/line.png"))
        self.line_action_1.triggered.connect(self.DDA_line_draw_action)
        self.line_action_2.triggered.connect(self.Bresenham_line_draw_action)
        self.line_menu = QMenu()
        self.line_menu.addAction(self.line_action_1)
        self.line_menu.addAction(self.line_action_2)
        self.line_tool_button = CusToolButton()
        self.line_tool_button.setMenu(self.line_menu)
        self.line_tool_button.setDefaultAction(self.line_action_1)
        self.line_tool_bar = QToolBar(self)
        self.line_tool_bar.addWidget(self.line_tool_button)

        # polygon相关
        self.polygon_action_1 = QAction("DDA polygon")
        self.polygon_action_2 = QAction("Bresenham polygon")
        self.polygon_action_1.setIcon(QIcon("./icon/polygon.png"))
        self.polygon_action_2.setIcon(QIcon("./icon/polygon.png"))
        self.polygon_action_1.triggered.connect(self.DDA_polygon_draw_action)
        self.polygon_action_2.triggered.connect(
            self.Bresenham_polygon_draw_action)
        self.polygon_menu = QMenu()
        self.polygon_menu.addAction(self.polygon_action_1)
        self.polygon_menu.addAction(self.polygon_action_2)
        self.polygon_tool_button = CusToolButton()
        self.polygon_tool_button.setMenu(self.polygon_menu)
        self.polygon_tool_button.setDefaultAction(self.polygon_action_1)
        self.polygon_tool_bar = QToolBar(self)
        self.polygon_tool_bar.addWidget(self.polygon_tool_button)

        # ellipse相关
        self.ellipse_action = QAction("Ellipse")
        self.ellipse_action.setIcon(QIcon("./icon/ellipse.png"))
        self.ellipse_action.triggered.connect(self.ellipse_draw_action)

        self.ellipse_tool_bar = QToolBar(self)
        self.ellipse_tool_bar.addAction(self.ellipse_action)

        # curve相关
        self.curve_action_1 = QAction("Bezier Curve")
        self.curve_action_1.setIcon(QIcon("./icon/curve.png"))
        self.curve_action_2 = QAction("B-spline Curve")
        self.curve_action_2.setIcon(QIcon("./icon/curve.png"))
        self.curve_action_1.triggered.connect(self.Bezier_curve_draw_action)
        self.curve_action_2.triggered.connect(self.B_spline_curve_draw_action)
        self.curve_menu = QMenu()
        self.curve_menu.addAction(self.curve_action_1)
        self.curve_menu.addAction(self.curve_action_2)
        self.curve_tool_button = CusToolButton()
        self.curve_tool_button.setMenu(self.curve_menu)
        self.curve_tool_button.setDefaultAction(self.curve_action_1)

        self.curve_tool_bar = QToolBar(self)
        self.curve_tool_bar.addWidget(self.curve_tool_button)

        # translate相关(平移)
        self.translate_action = QAction("Translate")
        self.translate_action.setIcon(QIcon("./icon/move.png"))
        self.translate_action.triggered.connect(self.translate_draw_action)

        self.translate_tool_bar = QToolBar(self)
        self.translate_tool_bar.addAction(self.translate_action)

        # rotate相关 旋转
        self.rotate_action = QAction("Rotate")
        self.rotate_action.setIcon(QIcon("./icon/rotate.png"))
        self.rotate_action.triggered.connect(self.rotate_draw_action)

        self.rotate_tool_bar = QToolBar(self)
        self.rotate_tool_bar.addAction(self.rotate_action)
        # scale相关,缩放;
        self.scale_action = QAction("Scale")
        self.scale_action.setIcon(QIcon("./icon/scale.png"))
        self.scale_action.triggered.connect(self.scale_draw_action)

        self.scale_tool_bar = QToolBar(self)
        self.scale_tool_bar.addAction(self.scale_action)
        # clip 裁剪
        self.clip_action_1 = QAction("Cohen-Sutherland Clip")
        self.clip_action_2 = QAction("Liang-Barsky Clip")

        self.clip_action_1.setIcon(QIcon("./icon/crop.png"))
        self.clip_action_2.setIcon(QIcon("./icon/crop.png"))
        self.clip_action_1.triggered.connect(
            self.Cohen_Sutherland_clip_draw_action)
        self.clip_action_2.triggered.connect(
            self.Liang_Barsky_clip_draw_action)

        self.clip_menu = QMenu()
        self.clip_menu.addAction(self.clip_action_1)
        self.clip_menu.addAction(self.clip_action_2)
        self.clip_tool_button = CusToolButton()
        self.clip_tool_button.setMenu(self.clip_menu)
        self.clip_tool_button.setDefaultAction(self.clip_action_1)

        self.clip_tool_bar = QToolBar(self)
        self.clip_tool_bar.addWidget(self.clip_tool_button)

        #鼠标选择相关;
        self.cursor_action = QAction("Cursor")
        self.cursor_action.setIcon(QIcon("./icon/cursor.png"))
        self.cursor_action.triggered.connect(self.cursor_draw_action)

        self.cursor_tool_bar = QToolBar(self)
        self.cursor_tool_bar.addAction(self.cursor_action)
        #多边形填充相关:
        self.fill_action = QAction("Fill")
        self.fill_action.setIcon(QIcon("./icon/fill.png"))

        self.fill_action.triggered.connect(self.fill_draw_action)
        self.fill_tool_bar = QToolBar(self)
        self.fill_tool_bar.addAction(self.fill_action)
        #多边形裁剪相关:
        self.polygon_clip_action = QAction("Polygon Clip")
        self.polygon_clip_action.setIcon(QIcon("./icon/cut_polygon.png"))

        self.polygon_clip_action.triggered.connect(
            self.polygon_clip_draw_action)
        self.polygon_clip_tool_bar = QToolBar(self)
        self.polygon_clip_tool_bar.addAction(self.polygon_clip_action)

        #x轴镜像相关:
        self.x_mirror_action = QAction("X Axis Mirror")
        self.x_mirror_action.setIcon(QIcon("./icon/flip_horizontal.png"))

        self.x_mirror_action.triggered.connect(self.x_mirror_draw_action)
        self.x_mirror_tool_bar = QToolBar(self)
        self.x_mirror_tool_bar.addAction(self.x_mirror_action)
        #y轴镜像相关:
        self.y_mirror_action = QAction("Y Axis Mirror")
        self.y_mirror_action.setIcon(QIcon("./icon/flip_vertical.png"))

        self.y_mirror_action.triggered.connect(self.y_mirror_draw_action)
        self.y_mirror_tool_bar = QToolBar(self)
        self.y_mirror_tool_bar.addAction(self.y_mirror_action)
        #复制粘贴相关:
        self.copy_action = QAction("Copy paste")
        self.copy_action.setIcon(QIcon("./icon/copy.png"))

        self.copy_action.triggered.connect(self.copy_draw_action)
        self.copy_tool_bar = QToolBar(self)
        self.copy_tool_bar.addAction(self.copy_action)
        #删除图元相关:
        self.delete_action = QAction("Delete")
        self.delete_action.setIcon(QIcon("./icon/trash.png"))

        self.delete_action.triggered.connect(self.delete_draw_action)
        self.delete_tool_bar = QToolBar(self)
        self.delete_tool_bar.addAction(self.delete_action)

        #     #布局
        tools_layout = QGridLayout()
        tools_layout.setAlignment(Qt.AlignLeft)
        tools_layout.addWidget(self.line_tool_bar, 0, 0)
        tools_layout.addWidget(self.polygon_tool_bar, 0, 1)
        tools_layout.addWidget(self.ellipse_tool_bar, 0, 2)
        tools_layout.addWidget(self.curve_tool_bar, 0, 3)
        tools_layout.addWidget(self.translate_tool_bar, 0, 4)
        tools_layout.addWidget(self.rotate_tool_bar, 0, 5)
        tools_layout.addWidget(self.scale_tool_bar, 0, 6)
        tools_layout.addWidget(self.clip_tool_bar, 0, 7)
        tools_layout.addWidget(self.cursor_tool_bar, 0, 8)
        tools_layout.addWidget(self.fill_tool_bar, 0, 9)
        tools_layout.addWidget(self.polygon_clip_tool_bar, 0, 10)
        tools_layout.addWidget(self.x_mirror_tool_bar, 0, 11)
        tools_layout.addWidget(self.y_mirror_tool_bar, 0, 12)
        tools_layout.addWidget(self.copy_tool_bar, 0, 13)
        tools_layout.addWidget(self.delete_tool_bar, 0, 14)
        # 加入tool_window
        tools_widget = QWidget(self.Tool_window)
        tools_widget.setLayout(tools_layout)
        self.Tool_window.setWidget(tools_widget)
        self.Tool_window.setFeatures(QDockWidget.DockWidgetMovable
                                     | QDockWidget.DockWidgetFloatable)

    #
    #
    #     #按钮组 通过按钮组的值连接槽函数确定状态
    #     toolbuttons=QButtonGroup()
    #     toolbuttons.addButton(line_button_1,1)
    #
    #
    #     toolbuttons.buttonClicked[int].connect(self.tool_clicked)
    # def tool_clicked(self,type:int):
    #     a=type

    def __init__(self):
        super().__init__()
        self.item_cnt = 0

        ## 主窗口布局
        # 图片与标题
        QMainWindow.setWindowIcon(self, QIcon("./picture/icon.png"))
        QMainWindow.setWindowTitle(self, "Image Editor By ytr")

        # self.setWindowTitle('CG Demo')

        # 界面大小位置
        # QMainWindow.resize(self,QApplication.desktop().width()*0.9,QApplication.desktop().height()*0.9)
        # QMainWindow.move(self,QApplication.desktop().width()*0.05,QApplication.desktop().height()*0.05)

        self.Menu_init()
        self.Color_init()

        self.Image_window = QDockWidget("图像编辑框")
        self.Image_window.setFeatures(QDockWidget.DockWidgetMovable
                                      | QDockWidget.DockWidgetFloatable)
        self.Image_window.setAllowedAreas(Qt.LeftDockWidgetArea
                                          | Qt.RightDockWidgetArea)
        self.Image_window.setMinimumSize(620, 620)  #大一点点 不然会有边框线

        self.List_window = QDockWidget("图元列表")
        self.List_window.setFeatures(QDockWidget.DockWidgetMovable)
        self.list_widget = QListWidget(self.List_window)
        self.list_widget.setMinimumWidth(200)
        self.scene = QGraphicsScene(self)
        self.scene.setSceneRect(1, 1, 601, 601)  #挪一个像素,不然会有边框线

        self.canvas_widget = MyCanvas(self.scene, self.Image_window)

        self.canvas_widget.setFixedSize(610, 610)  #这样就没有滑动条了
        self.canvas_widget.main_window = self
        self.canvas_widget.list_widget = self.list_widget

        self.List_window.setWidget(self.list_widget)
        self.Image_window.setWidget(self.canvas_widget)
        self.setCentralWidget(self.Image_window)
        height = self.Image_window.height()
        width = self.Image_window.width()
        center_y = (self.canvas_widget.geometry().height() - height) / 2
        center_x = (self.canvas_widget.geometry().width() - width) / 2
        self.canvas_widget.setGeometry(center_x, center_y,
                                       self.canvas_widget.geometry().width(),
                                       self.canvas_widget.geometry().height())
        self.canvas_widget.setAlignment(Qt.AlignCenter)

        # 槽函数
        self.list_widget.currentTextChanged.connect(
            self.canvas_widget.selection_changed)

        self.layout_init()
        self.tool_init()

        self.setStyleSheet(css)

        # self.hbox_layout = QHBoxLayout()
        # self.hbox_layout.addWidget(self.canvas_widget)
        # self.hbox_layout.addWidget(self.list_widget, stretch=1)
        # self.central_widget = QWidget(self.Image_window)
        # self.central_widget.setLayout(self.hbox_layout)

        # self.setCentralWidget(self.central_widget)
        self.statusBar().showMessage('空闲')
        self.resize(600, 600)

    def get_id(self):
        _id = str(self.item_cnt)
        self.item_cnt += 1
        return _id
Exemplo n.º 30
0
class MainWindow(QMainWindow):
    def __init__(self, *args, **kwargs):
        super(MainWindow, self).__init__(*args, **kwargs)
        self.frame = QFrame(self)

        self.virusIco = QLabel(self)
        self.virusTitle = QLabel(self)
        self.greetings = QLabel(self)
        self.pneumoniaInfo = QLabel(self)
        self.loading = QLabel(self)
        self.movieLabel = QLabel(self)
        self.testStat = QLabel(self)
        self.predictStat = QLabel(self)
        self.about = QLabel(self)

        self.testButton = QPushButton(self)
        self.predictButton = QPushButton(self)
        self.aboutButton = QPushButton(self)
        self.refreshButton = QPushButton(self)

        self.movie = QMovie(self)

        self.tableWidget = QTableWidget()

        self.modelsDir = os.getcwd() + "/pneumonia/models"
        self.assetsDir = os.getcwd() + "/assets/"

        self.window()

    def window(self):
        self.setGeometry(540, 250, 600, 750)
        self.setWindowTitle("Pneumonia Detector")
        self.setWindowIcon(QIcon(self.assetsDir + "corona.ico"))
        self.setFixedSize(900, 600)
        self.setStyleSheet("background-color: #3a6186")
        self.sidePanel()
        self.createUI()
        self.invokes()

    def createUI(self):
        self.icons(self.virusIco, self.assetsDir + "corona.png", 50, (10, 50), "background-color: #254059;")
        self.virusIco.show()
        self.labels(self.virusTitle, "Pneumonia\nDetector", (70, 15, 130, 30),
                    QFont("Courier New", 13, weight=QFont.Bold), "background-color: #254059;")
        self.virusTitle.show()
        self.labels(self.pneumoniaInfo, "Pneumonia is an infection that inflames the air sacs in one or both lungs. The"
                                        " air sacs may fill with fluid or pus (purulent material), causing cough with "
                                        "phlegm or pus, fever, chills, and difficulty breathing. A variety of "
                                        "organisms, including bacteria, viruses and fungi, can cause pneumonia. "
                                        "Pneumonia can range in seriousness from mild to life-threatening. It is most "
                                        "serious for infants and young children, people older than age 65, and people "
                                        "with health problems or weakened immune systems.", (10, 90, 190, 310),
                    QFont("Roboto", 10), "background-color: #254059;", Qt.AlignCenter)
        self.pneumoniaInfo.show()
        self.labels(self.greetings, "Welcome to the pneumonia detector! \n Choose an option and enjoy our app!",
                    (210, 30, 700, 100), QFont("Courier", 15, weight=QFont.Bold), "background-color: #3a6186",
                    Qt.AlignCenter)
        self.greetings.show()
        self.labels(self.loading, "Loading...", (450, 110, 400, 400), QFont("Courier", 30, weight=QFont.Bold),
                    "background-color: #3a6186", hide=True)
        self.labels(self.testStat, "", (215, 10, 675, 580), QFont("Courier", 30, weight=QFont.Bold),
                    "background-color: #254059", hide=True)
        self.labels(self.predictStat, "", (690, 10, 200, 400), QFont("Courier", 30, weight=QFont.Bold),
                    "background-color: #254059", hide=True)
        self.labels(self.about, "This app gives only chances of disease, it's not a medical conclusions. If you "
                                "get more than 35% in case you input a good photo, then you you should see a "
                                "doctor. If you choose a test option, you must to give a directory which consist "
                                "of 2 directories,'NORMAL' and 'PNEUMONIA', this command tests the "
                                "app(works not so fast). To use the predict button you must give a directory "
                                "consist of '.jpg' or '.jpeg'. The example photos are given below.",
                    (210, 0, 600, 250), QFont("Courier", 15, weight=QFont.Bold), "background-color: #3a6186",
                    hide=True)

        self.buttons(self.testButton, "Test", QIcon(self.assetsDir + "test.png"), QSize(32, 32), QFont("Roboto", 15),
                     (10, 480, 185, 50), "background-color: #254059;")
        self.testButton.show()
        self.buttons(self.predictButton, "Predict", QIcon(self.assetsDir + "predict.png"), QSize(25, 25),
                     QFont("Roboto", 15), (10, 420, 185, 50), "background-color: #254059;")
        self.predictButton.show()
        self.buttons(self.aboutButton, "About", QIcon(self.assetsDir + "about.png"), QSize(25, 25), QFont("Roboto", 15),
                     (10, 540, 185, 50), "background-color: #254059;", hide=False)
        self.aboutButton.show()
        self.buttons(self.refreshButton, "Refresh", QIcon(self.assetsDir + "refresh.png"), QSize(25, 25),
                     QFont("Roboto", 15), (10, 540, 185, 50), "background-color: #254059;", hide=True)

        self.movieStart(self.movieLabel, self.movie, self.assetsDir + "neponel.gif", QSize(400, 400),
                        (355, 130, 400, 400))

    def invokes(self):
        self.testButton.clicked.connect(partial(self.buttonClicked, self.testButton))
        self.predictButton.clicked.connect(partial(self.buttonClicked, self.predictButton))
        self.refreshButton.clicked.connect(partial(self.buttonClicked, self.refreshButton))
        self.aboutButton.clicked.connect(partial(self.buttonClicked, self.aboutButton))

    def sidePanel(self):
        self.frame.setFrameShape(QFrame.StyledPanel)
        self.frame.setLineWidth(1)
        self.frame.setFixedSize(205, 600)
        self.frame.setStyleSheet("background-color: #254059")

    @staticmethod
    def icons(labelObject, title, scale, geometry, backColor):
        labelObject.setPixmap(QPixmap(title).scaled(scale, scale))
        labelObject.setGeometry(geometry[0], geometry[0], geometry[1], geometry[1])
        labelObject.setStyleSheet(backColor)

    @staticmethod
    def labels(labelObject, text, geometry, font, backColor, alignment=None, hide=False):
        labelObject.setWordWrap(True)
        labelObject.setText(text)
        labelObject.setGeometry(geometry[0], geometry[1], geometry[2], geometry[3])
        labelObject.setFont(font)
        labelObject.setStyleSheet(backColor)
        if alignment:
            labelObject.setAlignment(alignment)
        if hide:
            labelObject.hide()

    @staticmethod
    def buttons(buttonObject, text, icon, icoSize, font, geometry, backColor, hide=False):
        buttonObject.setText(text)
        buttonObject.setGeometry(geometry[0], geometry[1], geometry[2], geometry[3])
        buttonObject.setIcon(icon)
        buttonObject.setIconSize(icoSize)
        buttonObject.setFont(font)
        buttonObject.setStyleSheet(backColor)
        if hide:
            buttonObject.hide()

    def buttonClicked(self, buttonObject):
        self.greetings.hide()
        self.movieLabel.hide()
        self.testButton.hide()
        self.predictButton.hide()
        self.aboutButton.hide()
        if buttonObject == self.testButton:
            imagesDir = QFileDialog.getExistingDirectory(self, "Select directory", expanduser("~"),
                                                         QFileDialog.ShowDirsOnly | QFileDialog.DontUseNativeDialog)+"/"
            self.refreshButton.show()
            self.refreshButton.setEnabled(False)
            self.loading.show()
            self.repaint()
            pd = PneumoniaDetect(self.modelsDir, imagesDir)
            pd.modelsTest()
            graph = QPixmap("test_stat.png")
            self.testStat.setPixmap(graph.scaled(675, 580))
            self.testStat.show()
            self.refreshButton.setEnabled(True)
            self.repaint()
        elif buttonObject == self.predictButton:
            imagesDir = QFileDialog.getExistingDirectory(self, "Select directory", expanduser("~"),
                                                         QFileDialog.ShowDirsOnly | QFileDialog.DontUseNativeDialog)+"/"
            self.loading.show()
            self.repaint()
            pd = PneumoniaDetect(self.modelsDir, imagesDir)
            result = pd.modelsPrediction()
            self.tableWidget = QTableWidget()
            self.tableWidget.setWindowTitle("Pneumonia probability")
            self.tableWidget.setStyleSheet("background-color: #3a6186")
            self.tableWidget.setGeometry(745, 250, 695, 600)
            self.tableWidget.setColumnCount(2)
            self.tableWidget.setRowCount(len(result))

            j = 0
            for i in result:
                self.tableWidget.setItem(j, 0, QTableWidgetItem(i))
                self.tableWidget.setItem(j, 1, QTableWidgetItem((str(result[i])[:6]) + "%"))
                j += 1

            self.tableWidget.setHorizontalHeaderLabels(["Image title", "Probability"])
            self.tableWidget.setColumnWidth(0, 300)
            self.tableWidget.setColumnWidth(1, 100)
            self.tableWidget.setEditTriggers(QAbstractItemView.NoEditTriggers)
            self.tableWidget.show()
            self.createUI()
        elif buttonObject == self.aboutButton:
            self.about.show()
            self.refreshButton.show()
            self.refreshButton.setEnabled(False)
            self.repaint()
            self.refreshButton.setEnabled(True)
            self.repaint()
        elif buttonObject == self.refreshButton:
            self.createUI()

    @staticmethod
    def movieStart(labelObject, movieObject, title, movieSize, geometry):
        movieObject.setFileName(title)
        movieObject.setScaledSize(movieSize)
        labelObject.setGeometry(geometry[0], geometry[1], geometry[2], geometry[3])
        labelObject.setMovie(movieObject)
        movieObject.start()
Exemplo n.º 31
0
class BRFViewer(QWidget):
    """
    Window that is used to show all the results produced with for the
    currently selected water level dataset.
    """

    def __init__(self, wldset=None, parent=None):
        super(BRFViewer, self).__init__(parent)
        self.__save_ddir = None

        self.setWindowTitle('BRF Results Viewer')
        self.setWindowIcon(icons.get_icon('master'))
        self.setWindowFlags(Qt.Window |
                            Qt.CustomizeWindowHint |
                            Qt.WindowMinimizeButtonHint |
                            Qt.WindowCloseButtonHint)

        self.__initGUI__()
        self.set_wldset(wldset)

    def __initGUI__(self):

        # ---- Navigator

        self.btn_prev = QToolButtonNormal(icons.get_icon('go_previous'))
        self.btn_prev.clicked.connect(self.navigate_brf)

        self.btn_next = QToolButtonNormal(icons.get_icon('go_next'))
        self.btn_next.clicked.connect(self.navigate_brf)

        self.current_brf = QSpinBox()
        self.current_brf.setRange(0, 99)
        self.current_brf.setAlignment(Qt.AlignCenter)
        self.current_brf.setButtonSymbols(QAbstractSpinBox.NoButtons)
        self.current_brf.setCorrectionMode(
                QAbstractSpinBox.CorrectToNearestValue)
        self.current_brf.valueChanged.connect(self.navigate_brf)
        self.current_brf.setValue(0)

        self.total_brf = QLabel('/ 0')

        # ---- Language button

        self.btn_language = LangToolButton()
        self.btn_language.setToolTip(
            "Set the language of the text shown in the graph.")
        self.btn_language.sig_lang_changed.connect(self.plot_brf)
        self.btn_language.setIconSize(icons.get_iconsize('normal'))

        # ---- Toolbar

        # Generate the buttons :

        self.btn_del = QToolButtonNormal(icons.get_icon('delete_data'))
        self.btn_del.setToolTip('Delete current BRF results')
        self.btn_del.clicked.connect(self.del_brf)

        self.btn_del_all = QToolButtonNormal(icons.get_icon('close_all'))
        self.btn_del_all.setToolTip(
            'Delete all BRF results for the current water level dataset.')
        self.btn_del_all.clicked.connect(self.del_all_brf)

        self.btn_save = btn_save = QToolButtonNormal(icons.get_icon('save'))
        btn_save.setToolTip('Save current BRF graph as...')
        btn_save.clicked.connect(self.select_savefig_path)

        self.btn_export = QToolButtonNormal(icons.get_icon('export_data'))
        self.btn_export.setToolTip('Export data to file.')
        self.btn_export.clicked.connect(self.select_export_brfdata_filepath)

        self.btn_copy = QToolButtonNormal('copy_clipboard')
        self.btn_copy.setToolTip('Copy figure to clipboard as image.')
        self.btn_copy.clicked.connect(self.copyfig_to_clipboard)

        self.btn_setp = QToolButtonNormal(icons.get_icon('page_setup'))
        self.btn_setp.setToolTip('Show graph layout parameters...')
        self.btn_setp.clicked.connect(self.toggle_graphpannel)

        # Generate the layout :

        self.tbar = myqt.QFrameLayout()

        buttons = [btn_save, self.btn_copy, self.btn_export, self.btn_del,
                   self.btn_del_all, VSep(), self.btn_prev, self.current_brf,
                   self.total_brf, self.btn_next, VSep(), self.btn_setp,
                   self.btn_language]

        for btn in buttons:
            if isinstance(btn, QLayout):
                self.tbar.addLayout(btn, 1, self.tbar.columnCount())
            else:
                self.tbar.addWidget(btn, 1, self.tbar.columnCount())

        row = self.tbar.columnCount()
        self.tbar.addWidget(HSep(), 0, 0, 1, row+1)
        self.tbar.setColumnStretch(row, 100)
        self.tbar.setContentsMargins(10, 0, 10, 10)  # (l, t, r, b)

        # ---- Graph Canvas

        self.fig_frame = QFrame()
        self.fig_frame.setFrameStyle(StyleDB().frame)
        self.fig_frame.setObjectName("figframe")
        self.fig_frame.setStyleSheet("#figframe {background-color:white;}")

        self.brf_canvas = FigureCanvasQTAgg(BRFFigure())

        fflay = QGridLayout(self.fig_frame)
        fflay.setContentsMargins(0, 0, 0, 0)   # (left, top, right, bottom)
        fflay.addWidget(self.tbar, 1, 0)
        fflay.addWidget(self.brf_canvas, 0, 0)

        # ---- Graph Options Panel

        self.graph_opt_panel = BRFOptionsPanel()
        self.graph_opt_panel.sig_graphconf_changed.connect(self.plot_brf)

        # ---- Main Layout

        ml = QGridLayout(self)

        ml.addWidget(self.fig_frame, 0, 2)
        ml.addWidget(self.graph_opt_panel, 0, 3)

        ml.setColumnStretch(1, 100)

    @property
    def savedir(self):
        """Return a path where figures and files are saved by default."""
        if self.__save_ddir is None or not osp.exists(self.__save_ddir):
            try:
                savedir = self.wldset.dirname
            except AttributeError:
                savedir = osp.dirname(__rootdir__)
            finally:
                return savedir
        else:
            return self.__save_ddir

    # ---- Toolbar Handlers
    def toggle_graphpannel(self):
        if self.graph_opt_panel.isVisible() is True:
            # Hide the panel.
            self.graph_opt_panel.setVisible(False)
            self.btn_setp.setAutoRaise(True)
            self.btn_setp.setToolTip('Show graph layout parameters...')

            w = self.size().width() - self.graph_opt_panel.size().width()
            self.setFixedWidth(w)
        else:
            # Show the panel.
            self.graph_opt_panel.setVisible(True)
            self.btn_setp.setAutoRaise(False)
            self.btn_setp.setToolTip('Hide graph layout parameters...')

            w = self.size().width() + self.graph_opt_panel.size().width()
            self.setFixedWidth(w)

    def navigate_brf(self):
        if self.sender() == self.btn_prev:
            cur_num = self.current_brf.value() - 1
        elif self.sender() == self.btn_next:
            cur_num = self.current_brf.value() + 1
        elif self.sender() == self.current_brf:
            cur_num = self.current_brf.value()
        self.current_brf.setValue(cur_num)

        self.update_brfnavigate_state()

    def del_brf(self):
        """Delete the graph and data of the currently selected result."""
        index = self.current_brf.value()-1
        name = self.wldset.get_brfname_at(index)
        self.wldset.del_brf(name)
        self.update_brfnavigate_state()

    def del_all_brf(self):
        """Delete all the graphs and BRF results for the current dataset."""
        msg = ("Do you want to delete all BRF results that were evaluated "
               "for dataset <i>{}</i>?"
               "<br><br>"
               "All data will be lost permanently."
               ).format(self.wldset.name)
        btn = QMessageBox.Yes | QMessageBox.No
        reply = QMessageBox.question(self, 'Delete all BRF results', msg, btn)

        if reply == QMessageBox.Yes:
            for name in self.wldset.saved_brf():
                self.wldset.del_brf(name)
            self.update_brfnavigate_state()

    def new_brf_added(self):
        self.current_brf.setMaximum(self.wldset.brf_count())
        self.current_brf.setValue(self.wldset.brf_count())
        self.update_brfnavigate_state()

    def update_brfnavigate_state(self):
        count = self.wldset.brf_count()
        self.total_brf.setText('/ %d' % count)

        self.current_brf.setMinimum(min(count, 1))
        self.current_brf.setMaximum(count)
        curnt = self.current_brf.value()

        self.tbar.setEnabled(count > 0)
        self.btn_prev.setEnabled(curnt > 1)
        self.btn_next.setEnabled(curnt < count)
        self.btn_del.setEnabled(count > 0)

        self.plot_brf()

    def select_savefig_path(self):
        """
        Opens a dialog to select a file path where to save the brf figure.
        """
        ddir = osp.join(self.savedir, 'brf_%s' % self.wldset['Well'])

        dialog = QFileDialog()
        fname, ftype = dialog.getSaveFileName(
                self, "Save Figure", ddir, '*.pdf;;*.svg')
        ftype = ftype.replace('*', '')
        if fname:
            if not osp.samefile(osp.dirname(ddir), osp.dirname(fname)):
                self.__save_ddir = osp.dirname(fname)
            if not fname.endswith(ftype):
                fname = fname + ftype
            self.save_brf_fig(fname)

    def save_brf_fig(self, fname):
        """Saves the current BRF figure to fname."""
        self.brf_canvas.figure.savefig(fname)

    def copyfig_to_clipboard(self):
        """Saves the current BRF figure to the clipboard."""
        buf = io.BytesIO()
        self.save_brf_fig(buf)
        QApplication.clipboard().setImage(QImage.fromData(buf.getvalue()))
        buf.close()

    def select_export_brfdata_filepath(self):
        """
        Open a dialog to select a file path where to save the brf data.
        """
        fname = 'brf_' + self.wldset['Well']
        if self.wldset['Well ID']:
            fname += '_%s' % self.wldset['Well ID']
        ddir = osp.join(self.savedir, fname)

        dialog = QFileDialog()
        fname, ftype = dialog.getSaveFileName(
                self, "Export Data", ddir, "*.xlsx;;*.xls;;*.csv")
        ftype = ftype.replace('*', '')
        if fname:
            if not osp.samefile(osp.dirname(ddir), osp.dirname(fname)):
                self.__save_ddir = osp.dirname(fname)
            if not fname.endswith(ftype):
                fname = fname + ftype
            self.export_brf_data(fname)

    def export_brf_data(self, fname):
        """Export the current BRF data to to file."""
        self.wldset.export_brf_to_csv(fname, self.current_brf.value()-1)

    # ---- Others
    def set_wldset(self, wldset):
        self.wldset = wldset
        self.setEnabled(wldset is not None)
        if wldset is not None:
            self.update_brfnavigate_state()

    def plot_brf(self):
        self.brf_canvas.figure.set_language(self.btn_language.language)
        if self.wldset.brf_count() == 0:
            self.brf_canvas.figure.empty_BRF()
        else:
            name = self.wldset.get_brfname_at(self.current_brf.value()-1)
            databrf = self.wldset.get_brf(name)
            well = self.wldset['Well']

            msize = self.graph_opt_panel.markersize
            draw_line = self.graph_opt_panel.draw_line

            ymin = self.graph_opt_panel.ymin
            ymax = self.graph_opt_panel.ymax
            yscale = self.graph_opt_panel.yscale

            xmin = self.graph_opt_panel.xmin
            xmax = self.graph_opt_panel.xmax
            xscale = self.graph_opt_panel.xscale
            time_units = self.graph_opt_panel.time_units

            date0 = databrf.date_start.strftime(format='%d/%m/%y %H:%M')
            date1 = databrf.date_end.strftime(format='%d/%m/%y %H:%M')
            self.brf_canvas.figure.plot_BRF(
                databrf['Lag'].values, databrf['SumA'].values,
                databrf['sdA'].values, date0, date1, well, msize, draw_line,
                [ymin, ymax], [xmin, xmax], time_units, xscale, yscale)
        self.brf_canvas.draw()

    def show(self):
        super(BRFViewer, self).show()
        qr = self.frameGeometry()
        if self.parentWidget():
            parent = self.parentWidget()

            wp = parent.frameGeometry().width()
            hp = parent.frameGeometry().height()
            cp = parent.mapToGlobal(QPoint(wp/2, hp/2))
        else:
            cp = QDesktopWidget().availableGeometry().center()

        qr.moveCenter(cp)
        self.move(qr.topLeft())
        self.fig_frame.setFixedSize(self.fig_frame.size())
        self.setFixedSize(self.size())

        self.raise_()
        if self.windowState() == Qt.WindowMinimized:
            # Window is minimised. Restore it.
            self.setWindowState(Qt.WindowNoState)