python - 旋转我上传到程序的图像
问题描述
我正在尝试使用一些按钮加载和删除图像,我需要创建另外两个按钮来向右或向左旋转 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_())
解决方案
推荐阅读
- python - 如何根据第二个数据帧映射第一个数据帧中的值?
- python - django-allauth 接收器信号在注册时向用户添加组权限
- android - 如何使用 Android NTP 同步两台设备的时间?
- javascript - 基于子字符串的 ElasticSearch 术语聚合
- javascript - 使用 D3.js 修复力图节点的位置
- c++ - 如何将 cv::Mat 转换为 dlib::array2d
, 和 typedef unsigned short int uint16_t - reactjs - 在 JWT 中存储自定义用户角色以在 React SPA 中使用?
- laravel - 如何测试 Laravel nova 的动作?
- python - 如何让用户在 Pyqt5 中输入图像
- javascript - 如何让这个简单的 Vue.js 代码适合初学者