Mensajes: 1.075
Temas: 3
Registro en: Feb 2016
Reputación:
65
Hola, ¿cómo estás?
Es difícil sin ver al menos parte del código. No obstante, si recibís un AttributeError al acceder a self.btn_limpiar es porque ese botón no está definido en la clase desde la cual lo estás llamado (¿tal vez en alguna de las otras cuatro?).
Saludos!
Mensajes: 19
Temas: 8
Registro en: Jul 2019
Reputación:
0
Hola Francisco, gracias y perdón por la demora en responder.
Repasando, el error que tira es el siguiente:
self.btn_limpiar.clicked.connect(lambda: sigeco_funciones.limpio_campos(self, self.var_pwd))
AttributeError: 'VentanaAcceso' object has no attribute 'btn_limpiar'
Te paso lo que sería (resumido) cómo estoy intentando hacer referencia desde mi aplicación principal al botón del archivo .py resultante de la conversión desde su original .ui (en color rojo la linea que tira el error):
import gui_acceso_ensayo
from gui_acceso_ensayo import Ui_AccesoWindow
from subprocess import Popen
from collections import Counter
from PyQt5 import uic, QtGui, QtWidgets, QtCore
class VentanaAcceso(QtWidgets.QDialog):
""" Acceso al Sistema """
def __init__(self):
QtWidgets.QDialog.__init__(self)
# --------- Del modo siguiente, con el archivo ui directamente, funciona OK. ---------
# uic.loadUi(os.path.join(gbl_ruta,"gui_acceso.ui"), self)
# ---------------------------------------------------------------------------------
self.btn_limpiar.clicked.connect(lambda: sigeco_funciones.limpio_campos(self, self.var_pwd))
self.var_pwd.setFocus()
***************************************************************************
A continuación el código del archivo gui_acceso_ensayo.py generado desde el gui_acceso_ensayo.ui:
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'gui_acceso_ensayo.ui'
#
# Created by: PyQt5 UI code generator 5.13.0
#
# WARNING! All changes made in this file will be lost!
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_AccesoWindow(object):
def setupUi(self, AccesoWindow):
AccesoWindow.setObjectName("AccesoWindow")
AccesoWindow.resize(268, 360)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Ignored)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(AccesoWindow.sizePolicy().hasHeightForWidth())
AccesoWindow.setSizePolicy(sizePolicy)
AccesoWindow.setMaximumSize(QtCore.QSize(268, 360))
AccesoWindow.setContextMenuPolicy(QtCore.Qt.NoContextMenu)
AccesoWindow.setWindowTitle("SiGeCo")
icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap("imagenes/logo_peq.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
AccesoWindow.setWindowIcon(icon)
AccesoWindow.setToolTip("")
AccesoWindow.setWhatsThis("")
AccesoWindow.setAutoFillBackground(True)
self.label_fdo = QtWidgets.QLabel(AccesoWindow)
self.label_fdo.setEnabled(True)
self.label_fdo.setGeometry(QtCore.QRect(0, 0, 268, 360))
self.label_fdo.setMinimumSize(QtCore.QSize(268, 360))
self.label_fdo.setMaximumSize(QtCore.QSize(268, 360))
self.label_fdo.setBaseSize(QtCore.QSize(268, 360))
self.label_fdo.setText("")
self.label_fdo.setPixmap(QtGui.QPixmap("imagenes/fdo_acceso.jpg"))
self.label_fdo.setObjectName("label_fdo")
self.var_pwd = QtWidgets.QLineEdit(AccesoWindow)
self.var_pwd.setGeometry(QtCore.QRect(40, 293, 131, 21))
font = QtGui.QFont()
font.setPointSize(10)
self.var_pwd.setFont(font)
self.var_pwd.setStyleSheet("background-color: rgb(255, 254, 230);")
self.var_pwd.setMaxLength(10)
self.var_pwd.setEchoMode(QtWidgets.QLineEdit.Password)
self.var_pwd.setPlaceholderText("")
self.var_pwd.setObjectName("var_pwd")
self.btn_limpiar = QtWidgets.QPushButton(AccesoWindow)
self.btn_limpiar.setGeometry(QtCore.QRect(140, 320, 24, 24))
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum)
sizePolicy.setHorizontalStretch(24)
sizePolicy.setVerticalStretch(24)
sizePolicy.setHeightForWidth(self.btn_limpiar.sizePolicy().hasHeightForWidth())
self.btn_limpiar.setSizePolicy(sizePolicy)
self.btn_limpiar.setMinimumSize(QtCore.QSize(24, 24))
self.btn_limpiar.setMaximumSize(QtCore.QSize(24, 24))
self.btn_limpiar.setBaseSize(QtCore.QSize(24, 24))
self.btn_limpiar.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
self.btn_limpiar.setStyleSheet("background-color: \"transparent\";")
self.btn_limpiar.setText("")
icon1 = QtGui.QIcon()
icon1.addPixmap(QtGui.QPixmap("imagenes/set4_limpiar.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.btn_limpiar.setIcon(icon1)
self.btn_limpiar.setIconSize(QtCore.QSize(24, 24))
self.btn_limpiar.setObjectName("btn_limpiar")
self.retranslateUi(AccesoWindow)
QtCore.QMetaObject.connectSlotsByName(AccesoWindow)
Bueno, espero que alcance como para aclarar el tema.
Gracias !!!
Mensajes: 19
Temas: 8
Registro en: Jul 2019
Reputación:
0
10-02-2020, 07:12 PM
(Última modificación: 11-02-2020, 03:31 PM por Francisco.)
Gracias Francisco, continúa el inconveniente:Si utilizo super().__init__(self), el error es: TypeError: object.__init__() takes exactly one argument (the instance to initialize) Si cambio la línea por Ui_AccesoWindow.__init__(self, self), el error es:TypeError: object.__init__() takes exactly one argument (the instance to initialize)Finalmente probé quitarle un self: Ui_AccesoWindow.__init__(self), y vuelve el error original:AttributeError: \'VentanaAcceso' object has no attribute 'btn_limpiar' ¿Alguna otra alternativa?Saludos
Mensajes: 19
Temas: 8
Registro en: Jul 2019
Reputación:
0
11-02-2020, 10:56 PM
(Última modificación: 13-02-2020, 10:41 AM por rakamapi.)
Perfecto Francisco, funciona !!!. Sólo tuve que introducir un pequeño agregado. Finalmente quedó así:
class VentanaAcceso(QtWidgets.QDialog):
""" Acceso al Sistema """
def __init__(self, *args, **kwargs):
QtWidgets.QDialog.__init__(self, *args, **kwargs)
self.dialog = Ui_AccesoWindow()
self.dialog.setupUi(self)
self.dialog.btn_limpiar.clicked.connect(lambda: sigeco_funciones.limpio_campos(self, self.dialog.var_pwd))
self.dialog.var_pwd.setFocus()
Muchas gracias !!!
Saludos.