Поверните изображение, которое я загружаю в программу - PullRequest
0 голосов
/ 06 мая 2020

Я пытаюсь загружать и удалять изображения с помощью некоторых кнопок, мне нужно создать две другие кнопки для поворота на 90 ° вправо или влево, проблема в том, что я не знаю, как это сделать. Кто-нибудь может мне помочь?

Я не уверен, что это то, что хранится в кадре, поэтому я не знаю, как обрабатывать изображение там, чтобы его можно было повернуть, я не знаю, есть ли какие-либо проще, или если я делаю что-то слишком плохое.

Код:


class VentanaPrincipal(QDialog):
    def __init__(self, parent=None):
        super(VentanaPrincipal, self).__init__(parent)

        self.setWindowTitle("Visualizador de Radiografias - INICM")
        self.setWindowIcon(QIcon("icono.png"))
        self.setWindowFlags(Qt.WindowCloseButtonHint | Qt.MSWindowsFixedSizeDialogHint)
        self.setFixedSize(650, 680)

        self.fondo()

        self.current_timer = QTimer()
        self.current_timer.timeout.connect(self.AbrirVH1)
        self.current_timer.setSingleShot(True)
        self.current_timer.start(5000)


    def fondo(self):

        label= QLabel(self)
        label.setGeometry(0, 0, 650, 680)
        label.setPixmap(QPixmap("FON.png"))
        label.setScaledContents(True)




    def AbrirVH1(self):
        VentanaMenu( self).exec_()

# ==========================VentanaMenu=========================================


class VentanaMenu(QDialog):
    def __init__(self, texto, parent=None):
        super(VentanaMenu, self).__init__()

        self.setWindowTitle("Menu - INICM")
        self.setWindowIcon(QIcon("icono.png"))
        self.setWindowFlags(Qt.WindowCloseButtonHint | Qt.MSWindowsFixedSizeDialogHint)
        self.setFixedSize(500, 600)
        self.botnsMenu()



    def botnsMenu(self):

        boton1 = QPushButton("VISUALIZADOR", self)
        boton1.setObjectName("VISUALIZADOR")
        boton1.setGeometry(200, 100, 280, 45)
        imabtn1= QLabel(self)
        imabtn1.setGeometry(68, 90, 60, 60)
        imabtn1.setPixmap(QPixmap("VISUALIZADOR.jpeg"))
        imabtn1.setScaledContents(True)


        boton2 = QPushButton("VISUALIZADOR", self)
        boton2.setGeometry(200, 200, 280, 45)
        imabtn2= QLabel(self)
        imabtn2.setGeometry(68, 190, 60, 60)
        imabtn2.setPixmap(QPixmap("VISUALIZADOR.jpeg"))
        imabtn2.setScaledContents(True)

        boton3 = QPushButton("VISUALIZADOR", self)
        boton3.setGeometry(200, 300, 280, 45)
        imabtn3= QLabel(self)
        imabtn3.setGeometry(68, 290, 60, 60)
        imabtn3.setPixmap(QPixmap("VISUALIZADOR.jpeg"))
        imabtn3.setScaledContents(True)

        boton4 = QPushButton("ACERCA DE INICM", self)
        boton4.setObjectName("ACERCA")
        boton4.setGeometry(200, 400, 280, 45)
        imabtn4= QLabel(self)
        imabtn4.setGeometry(68, 390, 60, 60)
        imabtn4.setPixmap(QPixmap("ACERCA.jpg"))
        imabtn4.setScaledContents(True)



        boton1.clicked.connect(self.botonesMenu)
        boton4.clicked.connect(self.mensajePersonalizado)



    def botonesMenu(self):

        nombreboton= self.sender().objectName()

        if nombreboton== "VISUALIZADOR":

            VentanaVISUALIZAR(self).exec_()


    def mensajePersonalizado(self):
        # Instanciamos la clase QMessageBox
        mensaje = QMessageBox(self)

        # Agregamos un icono al cuadro de mensaje
        mensaje.setWindowIcon(QIcon("icono.png"))

        # Agregamos un titulo al cuadro de mensaje
        mensaje.setWindowTitle("INFORMACION")

        # Le damos color al fondo del cuadro de mensaje
        paleta = QPalette()
        colorPanel = QPalette.Background
        paleta.setColor(colorPanel, QColor("white"))
        mensaje.setPalette(paleta)

        # Cambiamos el tamaño de la letra del cuadro de mensaje
        fuente = self.font()
        fuente.setPointSize(12)
        mensaje.setFont(fuente)

        # mensaje.setIcon(QMessageBox.Information)
        mensaje.setIconPixmap(QPixmap("icono.png").scaled(100, 100, Qt.KeepAspectRatio))
        mensaje.setText("Para nosotros es muy importante que estemos en contacto con nuestros clientes y garantizarles que nuestros productos y servivios sean de la mejor calidad.Esta es nuestra pagina en donde encontraras toda nuestra informacion:")
        mensaje.setInformativeText("""<a href='https://www.inicm.com/'>INICM</a>""")

        botonAceptar = mensaje.addButton("Aceptar", QMessageBox.YesRole)
        mensaje.setDefaultButton(botonAceptar)

        mensaje.exec_()






class VentanaVISUALIZAR(QDialog):
    def __init__(self, parent=None):
        super(VentanaVISUALIZAR, self).__init__()

        self.setWindowIcon(QIcon("icono.png"))
        self.setWindowTitle("Visualizador de Radiografias - INICM")
        self.setWindowFlags(Qt.MSWindowsFixedSizeDialogHint)
        self.setFixedSize(1020, 680)

        self.statusBar = QStatusBar(self)
        self.statusBar.setSizeGripEnabled(False)
        self.statusBar.move(0,650)
        self.statusBar.setFixedSize(1020,30)

        self.widget()

    def widget(self):

# ===================== LLAMAR WIDGETS =======================

        framePrincipal = QFrame(self)
        framePrincipal.setFrameShape(QFrame.Box)
        framePrincipal.setFrameShadow(QFrame.Sunken)
        framePrincipal.setAutoFillBackground(True)
        framePrincipal.setBackgroundRole(QPalette.Light)
        framePrincipal.setFixedSize(1000, 560)
        framePrincipal.move(10, 10)

        frame = QFrame(framePrincipal)
        frame.setFixedSize(980, 540)
        frame.move(10, 10)

        self.labelImagen = QLabel(frame)
        self.labelImagen.setAlignment(Qt.AlignCenter)
        self.labelImagen.setGeometry(0, 0, 980, 540)




# =================== BOTONES VISUALIZADOR ==================
        botonVCargar = QPushButton("Cargar Imagen", self)
        botonVCargar.setGeometry(QRect(10,590,325,30))
        botonVCargar.setIcon(QtGui.QIcon("cargar.png"))
        botonVCargar.setIconSize(QtCore.QSize(20,20))

        botonVEliminar = QPushButton("Eliminar Imagen", self)
        botonVEliminar.setGeometry(QRect(350,590,325,30))
        botonVEliminar.setIcon(QtGui.QIcon("borrar.png"))
        botonVEliminar.setIconSize(QtCore.QSize(20,20))

        #botonVgirar90 = QPushButton(self)
        #botonVgirar90.setGeometry(QRect(350,590,325,30))
        #botonVgirar90.setIcon(QtGui.QIcon("borrar.png"))
        #botonVgirar90.setIconSize(QtCore.QSize(20,20))

        #botonVgirarmenos90 = QPushButton(self)
        #botonVgirarmenos90.setGeometry(QRect(350,590,325,30))
        #botonVgirarmenos90.setIcon(QtGui.QIcon("borrar.png"))
        #botonVgirarmenos90.setIconSize(QtCore.QSize(20,20))

#================== ACCIONES BOTONES VISUALIZADOR ===================


        botonVCargar.clicked.connect(self.Cargar)
        botonVEliminar.clicked.connect(self.Eliminar)

        posicion = int
        carpetaActual = QDir()
        imagenesCarpeta = []

#================= FUNCIONES BOTONES VISUALIZADOR ====================




    def Mostrar (self, label, imagen, nombre, posicionX=970):
        imagen = QPixmap.fromImage(imagen)

    # Escalar imagen a 640x480 si el ancho es mayor a 640 o el alto mayor a 480
        if imagen.width() > 980 or imagen.height() > 540:
            imagen = imagen.scaled(980, 540, Qt.KeepAspectRatio, Qt.SmoothTransformation)

        # Mostrar imagen
        label.setPixmap(imagen)

        # Animación (al finalizar la animación se muestra en la barra de estado el nombre y la extensión de la imagen
        # y se desbloquean los botones).       
        self.animacionMostar = QPropertyAnimation(label, b"geometry")
        self.animacionMostar.finished.connect(lambda: (self.statusBar.showMessage(nombre)))
        self.animacionMostar.setDuration(200)
        self.animacionMostar.setStartValue(QRect(posicionX, 0, 960, 540))
        self.animacionMostar.setEndValue(QRect(0, 0, 960, 540))
        self.animacionMostar.start(QAbstractAnimation.DeleteWhenStopped)


    def Limpiar(self, labelConImagen, labelMostrarImagen, imagen, nombre,
            posicionInternaX, posicionX=None):

        def Continuar(estado):
            if estado:
                if posicionX:
                    self.Mostrar(labelMostrarImagen, imagen, nombre, posicionX)
                else:
                    self.Mostrar(labelMostrarImagen, imagen, nombre)

        self.animacionLimpiar = QPropertyAnimation(labelConImagen, b"geometry")
        self.animacionLimpiar.finished.connect(lambda: labelConImagen.clear())
        self.animacionLimpiar.setDuration(200)
        self.animacionLimpiar.stateChanged.connect(Continuar)
        self.animacionLimpiar.setStartValue(QRect(0, 0, 980, 540))
        self.animacionLimpiar.setEndValue(QRect(posicionInternaX, 0, 980, 540))
        self.animacionLimpiar.start(QAbstractAnimation.DeleteWhenStopped)

    def Cargar(self):

        nombreImagen, _ = QFileDialog.getOpenFileName(self, "Seleccionar imagen",
                                                      QDir.currentPath(),
                                                      "Archivos de imagen (*.jpg *.png *.ico *.bmp)")

        if nombreImagen:
            # Verificar que QLabel tiene imagen
            labelConImagen = ""
            if self.labelImagen.pixmap():
                labelConImagen = self.labelImagen
            #elif self.labelImagenUno.pixmap():
                #labelConImagen = self.labelImagenUno

            imagen = QImage(nombreImagen)
            if imagen.isNull():
                if labelConImagen:
                    self.Eliminar()

                QMessageBox.information(self, "Visor de imágenes",
                                        "No se puede cargar %s." % nombreImagen)
                return

            # Obtener ruta de la carpeta que contiene la imagen seleccionada
            self.carpetaActual = QDir(QFileInfo(nombreImagen).absoluteDir().path())

            # Obtener la ruta y el nombre de las imagenes que se encuentren en la carpeta de
            # la imagen seleccionada
            imagenes = self.carpetaActual.entryInfoList(["*.jpg", "*.png", "*.ico", "*.bmp"],
                                                        QDir.Files, QDir.Name)
            self.imagenesCarpeta = [imagen.absoluteFilePath() for imagen in imagenes]

            self.posicion = self.imagenesCarpeta.index(nombreImagen)

            # Función encargada de bloquear o desbloquear los botones
            #self.bloquearBotones(False)

            # Nombre y extensión de la imagen
            nombre = QFileInfo(nombreImagen).fileName()

            if labelConImagen:
                posicionInternaX = -970

            else:
                self.Mostrar(self.labelImagen, imagen, nombre)



    def Eliminar(self):
        def establecerValores():
            labelConImagen.clear()
            labelConImagen.move(0, 0)

            # Limpiar la barra de estado
            self.statusBar.clearMessage()

            # Establecer los valores predeterminados
            self.posicion = int
            self.estadoAnterior, self.estadoSiguiente = False, False
            self.carpetaActual = QDir()
            self.imagenesCarpeta.clear()



        # Verificar que QLabel tiene imagen
        labelConImagen = ""
        if self.labelImagen.pixmap():
            labelConImagen = self.labelImagen

        if labelConImagen:


            self.animacionEliminar = QPropertyAnimation(labelConImagen, b"geometry")
            self.animacionEliminar.finished.connect(establecerValores)
            self.animacionEliminar.setDuration(200)
            self.animacionEliminar.setStartValue(QRect(0, 0, 640, 480))
            self.animacionEliminar.setEndValue(QRect(-650, 0, 640, 480))
            self.animacionEliminar.start(QAbstractAnimation.DeleteWhenStopped)

    #def girar90(self):







    #def girarmenos90(self):






if __name__ == '__main__':

    import sys

    aplicacion = QApplication(sys.argv)

    ventana = VentanaPrincipal()
    ventana.show()

    sys.exit(aplicacion.exec_())

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...