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)