Esempio n. 1
0
class App(QDialog):
    def __init__(self):
        super().__init__()
        self.title = 'Flow - Browse File'
        self.left = 100
        self.top = 100
        self.width = 480
        self.height = 400
        self.initUI()

    def initUI(self):
        self.setWindowTitle(self.title)
        self.setGeometry(self.left, self.top, self.width, self.height)

        self.createBrowseBar()

        buttonLoad = QPushButton('Go', self)
        buttonLoad.clicked.connect(self.go_pressed)

        self.tabs = QTabWidget()
        self.tab1 = QWidget()
        self.tab2 = QWidget()
        self.tabs.addTab(self.tab1, "Media Drop")
        self.tabs.addTab(self.tab2, "Video Preview")
        # self.tabs.setMinimumSize(400, 300)

        self.tab1.layout = QVBoxLayout(self)
        self.dropArea = DropArea(textbox=self.textbox)
        self.tab1.layout.addWidget(self.dropArea)
        self.tab1.setLayout(self.tab1.layout)

        self.tab2.layout = QVBoxLayout(self)

        self.mediaPlayer = QMediaPlayer(None, QMediaPlayer.VideoSurface)
        videoWidget = QVideoWidget()

        self.playButton = QPushButton()
        self.playButton.setIcon(self.style().standardIcon(QStyle.SP_MediaPlay))
        self.playButton.clicked.connect(self.play)

        self.positionSlider = QSlider(Qt.Horizontal)
        self.positionSlider.setRange(0, 0)
        self.positionSlider.sliderMoved.connect(self.setPosition)

        controlLayout = QHBoxLayout()
        controlLayout.setContentsMargins(0, 0, 0, 0)
        controlLayout.addWidget(self.playButton)
        controlLayout.addWidget(self.positionSlider)

        self.mediaPlayer.setVideoOutput(videoWidget)
        self.mediaPlayer.stateChanged.connect(self.mediaStateChanged)
        self.mediaPlayer.positionChanged.connect(self.positionChanged)
        self.mediaPlayer.durationChanged.connect(self.durationChanged)

        self.tab2.layout.addWidget(videoWidget)
        self.tab2.layout.addLayout(controlLayout)

        self.tab2.setLayout(self.tab2.layout)

        windowLayout = QVBoxLayout()
        windowLayout.addWidget(self.horizontalGroupBox)
        windowLayout.addWidget(self.tabs)
        windowLayout.addWidget(buttonLoad)
        self.setLayout(windowLayout)

        self.show()

    def createBrowseBar(self):
        self.horizontalGroupBox = QGroupBox("Browse filesystem:")
        layout = QHBoxLayout()

        self.textbox = QLineEdit(self)
        layout.addWidget(self.textbox)

        buttonBrowse = QPushButton('...', self)
        buttonBrowse.clicked.connect(self.browse_filesystem)
        layout.addWidget(buttonBrowse)

        self.horizontalGroupBox.setLayout(layout)

    def openFileNameDialog(self):
        options = QFileDialog.Options()
        options |= QFileDialog.DontUseNativeDialog
        fileName, _ = QFileDialog.getOpenFileName(self,
                                                  "Browse Filesystem",
                                                  "",
                                                  "MP4 (*.mp4);;All Files (*)",
                                                  options=options)
        return fileName

    @pyqtSlot()
    def browse_filesystem(self):
        filepath = self.openFileNameDialog()
        self.textbox.setText(filepath)

        subprocess.run(
            "C:/ffmpeg/bin/ffmpeg -ss 00:00:00 -i {} -frames:v 1 tmp.jpg -y".
            format(filepath).split())

        pixmap = QPixmap("tmp.jpg")
        self.dropArea.setImage(pixmap)

    @pyqtSlot()
    def go_pressed(self):
        # if not self.dropArea.getImage().isNull():
        # run_detection(self.textbox.displayText())
        # self.dialog = ResultsView('tmp.jpg')
        # self.dialog.show()
        self.dialog = ResultsView('gui/lined_img.png', 'gui/info.txt')
        self.dialog.show()

    def play(self):
        if self.mediaPlayer.state() == QMediaPlayer.PlayingState:
            self.mediaPlayer.pause()
        else:
            filepath = self.textbox.displayText()
            self.mediaPlayer.setMedia(
                QMediaContent(QUrl.fromLocalFile(filepath)))
            self.mediaPlayer.play()

    def mediaStateChanged(self, state):
        if self.mediaPlayer.state() == QMediaPlayer.PlayingState:
            self.playButton.setIcon(self.style().standardIcon(
                QStyle.SP_MediaPause))
        else:
            self.playButton.setIcon(self.style().standardIcon(
                QStyle.SP_MediaPlay))

    def positionChanged(self, position):
        self.positionSlider.setValue(position)

    def durationChanged(self, duration):
        self.positionSlider.setRange(0, duration)

    def setPosition(self, position):
        self.mediaPlayer.setPosition(position)