class Widgets(QWidget): def __init__(self, dispositivoCamara, parent=None): super(Widgets, self).__init__(parent) self.parent = parent self.estadoFoto = False self.byteArrayFoto = QByteArray() # ========================================================== frame = QFrame(self) frame.setFrameShape(QFrame.Box) frame.setFrameShadow(QFrame.Sunken) frame.setFixedWidth(505) frame.setFixedHeight(380) frame.move(10, 10) # Instancias self.paginaVisor = QVideoWidget() self.paginaVisor.resize(500, 375) self.visor = QCameraViewfinder(self.paginaVisor) self.visor.resize(500, 375) self.labelFoto = QLabel() self.labelFoto.setAlignment(Qt.AlignCenter) self.labelFoto.resize(500, 375) # QStackedWidget self.stackedWidget = QStackedWidget(frame) self.stackedWidget.addWidget(self.paginaVisor) self.stackedWidget.addWidget(self.labelFoto) self.stackedWidget.resize(500, 375) self.stackedWidget.move(2, 2) # ======================== BOTONES ========================= self.buttonTomarFoto = QPushButton("Tomar foto", self) self.buttonTomarFoto.resize(110, 26) self.buttonTomarFoto.move(525, 10) self.buttonEliminarFoto = QPushButton("Eliminar foto", self) self.buttonEliminarFoto.resize(110, 26) self.buttonEliminarFoto.move(525, 50) self.buttonGuardarFoto = QPushButton("Guardar foto", self) self.buttonGuardarFoto.resize(110, 26) self.buttonGuardarFoto.move(525, 82) # ======================== EVENTOS ========================= self.buttonTomarFoto.clicked.connect(self.tomarFoto) self.buttonEliminarFoto.clicked.connect(self.eliminarFoto) self.buttonGuardarFoto.clicked.connect(self.guardarFoto) # ================== FUNCIONES AUTOMÁTICAS ================= self.setCamara(dispositivoCamara) # ======================= FUNCIONES ============================ def setCamara(self, dispositivoCamara): if dispositivoCamara.isEmpty(): self.camara = QCamera() else: self.camara = QCamera(dispositivoCamara) self.camara.stateChanged.connect(self.actualizarEstadoCamara) self.capturaImagen = QCameraImageCapture(self.camara) self.camara.setViewfinder(self.visor) self.actualizarEstadoCamara(self.camara.state()) self.capturaImagen.imageCaptured.connect(self.procesarImagenCapturada) self.capturaImagen.imageSaved.connect(self.imagenGuardada) self.camara.isCaptureModeSupported(QCamera.CaptureStillImage) self.camara.start() self.paginaVisor.update() def actualizarDispositivoCamara(self, action): self.setCamara(action.data()) def actualizarEstadoCamara(self, estado): if estado == QCamera.ActiveState: self.parent.accionIniciarCamara.setEnabled(False) self.parent.accionDetenerCamara.setEnabled(True) if not self.estadoFoto: self.buttonTomarFoto.setEnabled(True) self.buttonEliminarFoto.setEnabled(False) self.buttonGuardarFoto.setEnabled(False) elif estado in (QCamera.UnloadedState, QCamera.LoadedState): self.parent.accionIniciarCamara.setEnabled(True) self.parent.accionDetenerCamara.setEnabled(False) if not self.estadoFoto: self.buttonTomarFoto.setEnabled(False) self.buttonEliminarFoto.setEnabled(False) self.buttonGuardarFoto.setEnabled(False) def iniciarCamara(self): self.camara.start() def detenerCamara(self): self.camara.stop() def tomarFoto(self): rutaFoto = "{}/fotoTemporal.jpg".format(getcwd()) self.capturaImagen.capture(rutaFoto) self.estadoFoto = True def procesarImagenCapturada(self, requestId, imagen): foto = QPixmap.fromImage(imagen) buffer = QBuffer(self.byteArrayFoto) buffer.open(QIODevice.WriteOnly) buffer.close() foto.save(buffer, "PNG") fotoEscalada = foto.scaled(self.labelFoto.size()) self.labelFoto.setPixmap(fotoEscalada) self.mostrarImagenCapturada() def visualizarVisor(self): self.stackedWidget.setCurrentIndex(0) def mostrarImagenCapturada(self): self.stackedWidget.setCurrentIndex(1) self.buttonTomarFoto.setEnabled(False) self.buttonEliminarFoto.setEnabled(True) self.buttonGuardarFoto.setEnabled(True) def imagenGuardada(self, id, nombreFoto): if QFile.exists(nombreFoto): remove(nombreFoto) def eliminarFoto(self): self.estadoFoto = False self.byteArrayFoto.clear() self.labelFoto.clear() self.actualizarEstadoCamara(self.camara.state()) self.visualizarVisor() def guardarFoto(self): guardarComo, extension = QFileDialog.getSaveFileName( self, "Guardar como", "Foto", "JPG (*.jpg);;PNG (*.png);;ICO (*.ico);;BMP (*.bmp)", options=QFileDialog.Options()) if guardarComo: foto = QPixmap() foto.loadFromData(self.byteArrayFoto, "PNG", Qt.AutoColor) foto.save(guardarComo, quality=100) QMessageBox.information( self, "Guardar foto", "Foto guardada con éxito ") self.eliminarFoto()
class Window(QtWidgets.QMainWindow): def __init__(self): super().__init__() self.k = 0 self.init_ui() def init_ui(self): self.setWindowTitle('SyncMedia') self.play = QtWidgets.QPushButton(self) self.stop = QtWidgets.QPushButton(self) self.play.setText('Play') self.stop.setText('Stop') self.label = QtWidgets.QLabel("Volume", self) self.Slider = QtWidgets.QSlider(self) self.Slider.setRange(0, 100) self.Slider.sliderMoved.connect(self.setPosition) self.Slider.setOrientation(Qt.Horizontal) self.Slider.setFocusPolicy(Qt.NoFocus) self.VSlider = QtWidgets.QSlider(self) self.VSlider.sliderMoved.connect(self.setVPosition) self.VSlider.setRange(0, 10) self.VSlider.setOrientation(Qt.Horizontal) self.VSlider.setFocusPolicy(Qt.NoFocus) openAction = QtWidgets.QAction(QtGui.QIcon('open.png'), '&Open', self) openAction.setShortcut('Ctrl+O') openAction.setStatusTip('Open mp4 movie') openAction.triggered.connect(self.openFile) menu = self.menuBar() file = menu.addMenu(' &File ') file.addAction(openAction) self.play.clicked.connect(self.play_click) self.stop.clicked.connect(self.stop_click) self.mediaPlayer = QMediaPlayer(None, QMediaPlayer.VideoSurface) self.videoWidget = QVideoWidget() wid = QtWidgets.QWidget(self) self.setCentralWidget(wid) wid.resize(wid.sizeHint()) wid.setAutoFillBackground(True) p = wid.palette() p.setColor(wid.backgroundRole(), Qt.black) wid.setPalette(p) self.Slider.setAutoFillBackground(True) p = self.Slider.palette() p.setColor(self.Slider.backgroundRole(), Qt.black) self.Slider.setPalette(p) controlLayout = QtWidgets.QHBoxLayout() controlLayout.addWidget(self.play) controlLayout.addWidget(self.stop) controlLayout.addStretch(1) controlLayout.addWidget(self.label) controlLayout.addWidget(self.VSlider) extralayout = QtWidgets.QHBoxLayout() extralayout.addWidget(self.videoWidget) layout = QtWidgets.QVBoxLayout() layout.addLayout(extralayout) self.videoWidget.update() layout.addWidget(self.Slider) layout.addLayout(controlLayout) wid.setLayout(layout) self.mediaPlayer.setVideoOutput(self.videoWidget) self.videoWidget.show() self.mediaPlayer.positionChanged.connect(self.positionChanged) self.mediaPlayer.durationChanged.connect(self.durationChanged) self.show() def play_click(self): if (self.k == 0): self.mediaPlayer.play() self.play.setText('Pause') self.videoWidget.update() self.k = 1 elif (self.k == 1): self.mediaPlayer.pause() self.play.setText('Play') self.k = 0 def stop_click(self): self.mediaPlayer.stop() self.play.setText('Play') self.k = 0 def openFile(self): fileName, _ = QtWidgets.QFileDialog.getOpenFileName( self, "Open Movie", QDir.homePath()) self.setWindowTitle(f'SyncMedia - {fileName}') if fileName != '': print(fileName) self.mediaPlayer.setMedia( QMediaContent(QUrl.fromLocalFile(fileName))) def positionChanged(self, position): self.Slider.setValue(position) def durationChanged(self, duration): self.Slider.setRange(0, duration) def setPosition(self, position): self.mediaPlayer.setPosition(position) def setVPosition(self, position): self.mediaPlayer.setVolume(position * 10)