应用于状态栏的错误 "Object has no attribute" 不显示状态
Error "Object has no attribute" applied to status Bar does not show status
我在加载图像时尝试加载和删除图像 我创建了一个状态栏来告诉我文件的名称,如果我删除它,栏会被清除,我收到此错误并且我不知道可能是什么,幸运的是他们给我加载了图像,但在控制台中,它向我抛出错误并且没有显示状态栏(我留下了部分代码),谢谢...
错误
Traceback (most recent call last): File "lol.py", line 220, in
self.animacionMostar.finished.connect(lambda: (self.statusBar.showMessage(nombre))) AttributeError:
'VentanaVISUALIZAR' object has no attribute 'statusBar'
代码:
class VentanaVISUALIZAR(QDialog):
def __init__(self, parent=None):
super(VentanaVISUALIZAR, self).__init__()
self.setWindowIcon(QIcon("icono.png"))
self.setWindowTitle("Visualizador ")
self.setWindowFlags(Qt.MSWindowsFixedSizeDialogHint)
self.setFixedSize(1020, 680)
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)
self.labelImagenUno = QLabel(frame)
self.labelImagenUno.setAlignment(Qt.AlignCenter)
self.labelImagenUno.setGeometry(-970, 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))
#================== ACCIONES BOTONES VISUALIZADOR ===================
botonVCargar.clicked.connect(self.Cargar)
botonVEliminar.clicked.connect(self.Eliminar)
posicion = int
carpetaActual = QDir()
imagenesCarpeta = []
def bloquearBotones(self, bool):
self.botonVCargar.setEnabled(bool)
self.botonVEliminar.setEnabled(bool)
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.valueChanged.connect(lambda x: print(x))
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
labelMostrarImagen = self.labelImagen if self.labelImagenUno.pixmap() else self.labelImagenUno
self.Limpiar(labelConImagen, labelMostrarImagen, imagen, nombre, posicionInternaX)
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()
#self.bloquearBotones(True)
# Verificar que QLabel tiene imagen
labelConImagen = ""
if self.labelImagen.pixmap():
labelConImagen = self.labelImagen
elif self.labelImagenUno.pixmap():
labelConImagen = self.labelImagenUno
if labelConImagen:
#self.bloquearBotones(False)
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)
VentanaVISUALIZAR
是 QDialog
的子类,默认情况下没有状态栏。您可以通过向 VentanaVISUALIZAR.__init__
:
添加类似的内容来添加一个
self.statusBar = QStatusBar(self)
self.statusBar.setSizeGripEnabled(False)
self.statusBar.move(0,650)
self.statusBar.setFixedSize(1020,30)
我在加载图像时尝试加载和删除图像 我创建了一个状态栏来告诉我文件的名称,如果我删除它,栏会被清除,我收到此错误并且我不知道可能是什么,幸运的是他们给我加载了图像,但在控制台中,它向我抛出错误并且没有显示状态栏(我留下了部分代码),谢谢...
错误
Traceback (most recent call last): File "lol.py", line 220, in self.animacionMostar.finished.connect(lambda: (self.statusBar.showMessage(nombre))) AttributeError: 'VentanaVISUALIZAR' object has no attribute 'statusBar'
代码:
class VentanaVISUALIZAR(QDialog):
def __init__(self, parent=None):
super(VentanaVISUALIZAR, self).__init__()
self.setWindowIcon(QIcon("icono.png"))
self.setWindowTitle("Visualizador ")
self.setWindowFlags(Qt.MSWindowsFixedSizeDialogHint)
self.setFixedSize(1020, 680)
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)
self.labelImagenUno = QLabel(frame)
self.labelImagenUno.setAlignment(Qt.AlignCenter)
self.labelImagenUno.setGeometry(-970, 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))
#================== ACCIONES BOTONES VISUALIZADOR ===================
botonVCargar.clicked.connect(self.Cargar)
botonVEliminar.clicked.connect(self.Eliminar)
posicion = int
carpetaActual = QDir()
imagenesCarpeta = []
def bloquearBotones(self, bool):
self.botonVCargar.setEnabled(bool)
self.botonVEliminar.setEnabled(bool)
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.valueChanged.connect(lambda x: print(x))
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
labelMostrarImagen = self.labelImagen if self.labelImagenUno.pixmap() else self.labelImagenUno
self.Limpiar(labelConImagen, labelMostrarImagen, imagen, nombre, posicionInternaX)
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()
#self.bloquearBotones(True)
# Verificar que QLabel tiene imagen
labelConImagen = ""
if self.labelImagen.pixmap():
labelConImagen = self.labelImagen
elif self.labelImagenUno.pixmap():
labelConImagen = self.labelImagenUno
if labelConImagen:
#self.bloquearBotones(False)
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)
VentanaVISUALIZAR
是 QDialog
的子类,默认情况下没有状态栏。您可以通过向 VentanaVISUALIZAR.__init__
:
self.statusBar = QStatusBar(self)
self.statusBar.setSizeGripEnabled(False)
self.statusBar.move(0,650)
self.statusBar.setFixedSize(1020,30)