コード例 #1
0
class Browser():
    def __init__(self, app):
        self.listViewModel = QStandardItemModel()

        self.app = app

        self.listView = QListView(app)
        self.listView.move(15, 145)
        self.listView.setFixedSize(app.width - 30, app.height - 190)
        self.listView.setModel(self.listViewModel)
        self.listView.setEditTriggers(QAbstractItemView.NoEditTriggers)
        self.listView.doubleClicked.connect(self.processItem)
        self.listView.keyPressEvent = self.keyPressEvent
        self.listView.selectionModel().selectionChanged.connect(
            self.selectionChanged)

    def populate(self, entries):
        self.listViewModel.clear()

        for entry in entries:
            item = QStandardItem(
                QIcon('icons/' + (
                    'file.png' if entry['type'] == 'file' else 'folder.png')),
                entry['name'])

            item.setData(entry)
            self.listViewModel.appendRow(item)

    def processItem(self):
        if self.item.data()['type'] == 'dir':
            self.app.navigateDown(self.selectedItem())
        else:
            self.app.extract()

    def keyPressEvent(self, event):
        super(QListView, self.listView).keyPressEvent(event)

        if event.key() == Qt.Key_Return:
            self.processItem()

    def deselect(self):
        self.item = None
        self.app.disableFileActions()

    def selectedItem(self):
        return self.item.text() if self.item else None

    def selectionChanged(self, selected, deselected):
        if len(selected.indexes()):
            modelIndex = selected.indexes()[0]

            self.item = modelIndex.model().item(modelIndex.row())
            self.app.enableFileActions()
        else:
            self.deselect()
コード例 #2
0
class AppUI(QWidget):
    """class that represent UI of OMR, using PyQt5"""
    def __init__(self):
        super().__init__()
        self.initUI()
        self.pathList = []
        self.rgzr = Recognizer()

    def initUI(self):
        font = QFont()
        font.setPointSize(12)

        QToolTip.setFont(font)

        addBtn = QPushButton(" Додати зображення ", self)
        addBtn.setFont(font)
        addBtn.setFixedSize(210, 40)
        addBtn.clicked.connect(self.showDialog)

        recognBtn = QPushButton("Розпізнати", self)
        recognBtn.setFont(font)
        recognBtn.setFixedSize(210, 40)
        recognBtn.clicked.connect(self.recognize)

        delBtn = QPushButton(self)
        delBtn.setFixedSize(50, 50)
        delBtn.setIcon(QIcon("images/delete.png"))
        delBtn.clicked.connect(self.deleteImg)
        delBtn.setToolTip("Видалити зображення з набору")

        rotateBtn = QPushButton(self)
        rotateBtn.setFixedSize(50, 50)
        rotateBtn.setIcon(QIcon("images/rotate.png"))
        rotateBtn.clicked.connect(self.rotateImg)
        rotateBtn.setToolTip("Повернути зображення")

        self.pic = QLabel("", self)
        self.pic.setFixedSize(330, 580)
        self.pic.setFrameShape(QFrame.Panel)

        lbl = QLabel(" Список зображень: ")
        lbl.setFont(font)
        lbl.setFixedSize(300, 40)

        self.picList = QListView(self)
        self.picList.setFixedSize(300, 300)
        self.picList.clicked.connect(self.itemClicked)

        self.listModel = QStandardItemModel(self.picList)
        self.picList.setModel(self.listModel)

        splitter = QSplitter(Qt.Vertical)

        vbtnbox = QVBoxLayout()
        vbtnbox.addStretch(1)
        vbtnbox.addWidget(addBtn)
        vbtnbox.addWidget(recognBtn)
        vbtnbox.setAlignment(Qt.AlignCenter)

        vlistbox = QVBoxLayout()
        vlistbox.addStretch(1)
        vlistbox.addWidget(lbl)
        vlistbox.addWidget(self.picList)

        hbtnbox = QHBoxLayout()
        hbtnbox.addWidget(delBtn)
        hbtnbox.addWidget(rotateBtn)

        vimgbox = QVBoxLayout()
        vimgbox.addWidget(self.pic)
        vimgbox.addLayout(hbtnbox)

        vbox = QVBoxLayout()
        vbox.addLayout(vlistbox)
        vbox.addLayout(vbtnbox)

        hbox = QHBoxLayout()
        #hbox.addWidget(self.pic, alignment=Qt.AlignLeft)
        hbox.addLayout(vimgbox)
        hbox.addWidget(splitter)
        hbox.addLayout(vbox)

        self.setLayout(hbox)

        self.setGeometry(300, 300, 600, 600)
        self.setWindowTitle('OMR')
        self.show()

    def showDialog(self):
        fname = QFileDialog.getOpenFileNames(self, 'Open file', filter='*.jpg')
        if fname[0]:
            for path in fname[0]:
                if path not in self.pathList:
                    self.pathList.append(path)
                    self.addItemToList(path[path.rfind('/') + 1:])
            self.sltdImgIndx = len(self.pathList) - 1
            path = self.pathList[-1]
            pixmap = QPixmap(path)
            pixmap = pixmap.scaled(self.pic.size(),
                                   aspectRatioMode=Qt.KeepAspectRatio)
            self.pic.setPixmap(pixmap)

    def addItemToList(self, path):
        item = QStandardItem(path)
        item.setEditable(False)
        self.listModel.appendRow(item)

    def itemClicked(self, sender):
        indx = sender.row()
        self.sltdImgIndx = indx
        pixmap = QPixmap(self.pathList[indx])
        pixmap = pixmap.scaled(self.pic.size(),
                               aspectRatioMode=Qt.KeepAspectRatio)
        self.pic.setPixmap(pixmap)

    def recognize(self):
        fname = QFileDialog.getSaveFileName(
            self, "Оберіть розташування та назву для файла", filter='*.txt')
        if fname[0]:
            saver = ResultSaver(fname[0])
            for img_path in self.pathList:
                answ, image_path = self.rgzr.recognize(img_path)
                saver.write(answ, img_path[img_path.rfind('/'):])
                QPicDialog.show(self, image_path)
                os.remove(image_path)

    def deleteImg(self):
        if self.pathList:
            indx = self.sltdImgIndx
            self.pathList.remove(self.pathList[indx])
            self.listModel.removeRow(indx)
            if len(self.pathList) > 0:
                self.sltdImgIndx = 0
                pixmap = QPixmap(self.pathList[0])
                pixmap = pixmap.scaled(self.pic.size(),
                                       aspectRatioMode=Qt.KeepAspectRatio)
                self.pic.setPixmap(pixmap)
            else:
                self.sltdImgIndx = None
                self.pic.clear()

    def rotateImg(self):
        new_path = ImageRotator.rotate(self.pathList[self.sltdImgIndx])
        pixmap = QPixmap(new_path)
        pixmap = pixmap.scaled(self.pic.size(),
                               aspectRatioMode=Qt.KeepAspectRatio)
        self.pic.setPixmap(pixmap)
        item = QStandardItem(new_path[new_path.rfind('/') + 1:])
        item.setEditable(False)
        self.listModel.setItem(self.sltdImgIndx, item)
        self.pathList[self.sltdImgIndx] = new_path