Esempio n. 1
0
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()
Esempio n. 2
0
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)